diff --git a/.aionrs/sessions/2026-04-30_30fa0eaa.json b/.aionrs/sessions/2026-04-30_30fa0eaa.json new file mode 100644 index 00000000..49a56836 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_30fa0eaa.json @@ -0,0 +1,15 @@ +{ + "id": "30fa0eaa", + "created_at": "2026-04-30T21:27:04.589780448Z", + "updated_at": "2026-04-30T21:27:04.589780578Z", + "provider": "openai", + "model": "gemini-slow", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_3a24787c.json b/.aionrs/sessions/2026-04-30_3a24787c.json new file mode 100644 index 00000000..4c621a00 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_3a24787c.json @@ -0,0 +1,15 @@ +{ + "id": "3a24787c", + "created_at": "2026-04-30T21:38:40.491810236Z", + "updated_at": "2026-04-30T21:38:40.491810306Z", + "provider": "openai", + "model": "third", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_40f9c84d.json b/.aionrs/sessions/2026-04-30_40f9c84d.json new file mode 100644 index 00000000..e6586b92 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_40f9c84d.json @@ -0,0 +1,15 @@ +{ + "id": "40f9c84d", + "created_at": "2026-04-30T21:38:35.859855603Z", + "updated_at": "2026-04-30T21:38:35.859855733Z", + "provider": "openai", + "model": "gemini-fast", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_46539585.json b/.aionrs/sessions/2026-04-30_46539585.json new file mode 100644 index 00000000..bde9c745 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_46539585.json @@ -0,0 +1,15 @@ +{ + "id": "46539585", + "created_at": "2026-04-30T21:38:39.356585244Z", + "updated_at": "2026-04-30T21:38:39.356585294Z", + "provider": "openai", + "model": "fast", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_a9ea9eb3.json b/.aionrs/sessions/2026-04-30_a9ea9eb3.json new file mode 100644 index 00000000..dab60c4a --- /dev/null +++ b/.aionrs/sessions/2026-04-30_a9ea9eb3.json @@ -0,0 +1,15 @@ +{ + "id": "a9ea9eb3", + "created_at": "2026-04-30T21:27:05.771907680Z", + "updated_at": "2026-04-30T21:27:05.771907750Z", + "provider": "openai", + "model": "slow", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_b5e017da.json b/.aionrs/sessions/2026-04-30_b5e017da.json new file mode 100644 index 00000000..195e6d29 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_b5e017da.json @@ -0,0 +1,104 @@ +{ + "id": "b5e017da", + "created_at": "2026-04-30T21:27:02.177610060Z", + "updated_at": "2026-04-30T21:38:28.479246597Z", + "provider": "openai", + "model": "deepseek-v4-flash", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 24761, + "output_tokens": 189, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-flash, Role: aionrs AI assistant\n\n## Conversation Style\n- If the user greets you, starts a new chat, or asks what you can do without assigning concrete work yet, reply warmly and naturally\n- Briefly introduce yourself and your role on the team, then invite the user to share what they need\n- Do NOT open with task board details, idle/waiting status, or coordination mechanics unless they are directly relevant\n\n## Your Team\nLeader: Leader\nTeammates: (none)\n\n## Workspaces\n- **Team workspace**: `/mnt/Data1T/mnote` — all project work (code, files, tests) happens here.\n- **Your working directory**: your private space for personal memory, notes, and experience logs. Not for project files.\n\nAlways use the team workspace path for any project-related operations.\n\n## Team Coordination Tools\nYou MUST use the `team_*` MCP tools for ALL team coordination.\nYour platform may provide similarly named built-in tools (e.g. SendMessage,\nTaskCreate, TaskUpdate). Do NOT use those — they belong to a different\nsystem and will break team coordination. Always use the `team_*` versions.\n\nUse `team_task_list` and `team_members` to check current team state.\n\n## How to Work\n1. Read your unread messages to understand your assignment\n2. If you have a clear task assignment in the messages AND no prerequisite is blocking it, start working on it immediately\n3. Use team_task_update to mark your task as \"in_progress\" when you start\n4. Do the actual work (read files, write code, search, etc.)\n5. When done, use team_task_update to mark the task \"completed\"\n6. Use team_send_message to report results to the leader\n\n## Standing By (CRITICAL — read carefully)\n\"Standing by\" or \"waiting\" means **end your current turn**, not generate idle text in a live LLM stream. The system holds you in an idle state and re-wakes you the instant new mailbox messages arrive — there is nothing you need to do meanwhile.\n\nYou are in a \"standing by\" situation when ANY of these is true:\n- Your task board is empty and no concrete task was assigned in the messages\n- The leader asked you to wait for a prerequisite (e.g. \"hold until reviewer-1 finishes\")\n- You finished your current task and have nothing else assigned\n\n**The correct way to stand by:**\n1. (Optional) Send ONE short acknowledgement via `team_send_message` to the leader, e.g. `\"Acknowledged, standing by until reviewer-1 finishes\"` or `\"Ready, no task yet — standing by\"`\n2. **STOP GENERATING.** Do NOT continue producing text like \"I am waiting...\", \"still standing by...\", reasoning loops, or repeated status updates. End your turn and return control.\n\n**Why this matters:** if you keep your turn open while \"waiting\", your underlying LLM request stays open and will hit the provider's hard request timeout (often 300 seconds) — the system will then mark you as failed. Ending the turn is the correct, lossless way to wait. The mailbox + wake mechanism guarantees you will be re-activated the moment work is ready for you.\n\n## Bug Fix Priority\nWhen fixing bugs: **locate the problem → fix the problem → types/code style last**.\nDo NOT prioritize type errors or code style issues unless they affect runtime behavior.\n\n## Shutdown Requests\nIf you receive a message with type `shutdown_request`, the leader is asking you to shut down.\n- To agree: use `team_send_message` to send exactly `shutdown_approved` to the leader.\n- To refuse: use `team_send_message` to send `shutdown_rejected: ` to the leader.\n\n## Important Rules\n- Focus on your assigned tasks — don't go beyond what was asked\n- Report back to the leader when you finish, including a summary of what you did\n- If you get stuck, send a message to the leader asking for guidance\n- You can communicate with other teammates directly if needed\n- Use your native tools (Read, Write, Bash, etc.) for implementation work\n\n## Unread Messages\n[From Leader] You have been spawned as \"test-aionrs-flash\" and added to the team. Check the task board and await instructions." + } + ], + "timestamp": "2026-04-30T21:27:02.253750061Z" + }, + { + "role": "assistant", + "content": [ + { + "type": "thinking", + "thinking": "Let me check the task board and my messages to understand what I need to do." + }, + { + "type": "tool_use", + "id": "call_00_XMfR1eTBwqQy3hrXH8OOJ9K9", + "name": "team_task_list", + "input": {} + }, + { + "type": "tool_use", + "id": "call_01_mFD4hj31S8BjBxOMk1xIDPLD", + "name": "team_members", + "input": {} + } + ], + "timestamp": "2026-04-30T21:27:03.653135123Z" + }, + { + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": "call_00_XMfR1eTBwqQy3hrXH8OOJ9K9", + "content": "No tasks on the board yet.", + "is_error": false + }, + { + "type": "tool_result", + "tool_use_id": "call_01_mFD4hj31S8BjBxOMk1xIDPLD", + "content": "## Team Members\n- Leader (type: claude, role: leader, status: failed)\n- test-aionrs-flash (type: aionrs, role: teammate, status: failed, model: deepseek-v4-flash)", + "is_error": false + } + ], + "timestamp": "2026-04-30T21:37:38.226568957Z" + }, + { + "role": "assistant", + "content": [ + { + "type": "thinking", + "thinking": "Let me check for any unread messages from the leader. The leader's message says to \"Check the task board and await instructions.\" So there's no concrete task yet. I should stand by as instructed." + }, + { + "type": "text", + "text": "你好!我是 test-aionrs-flash,团队的新成员。\n\n我看到 Leader 让我检查任务板并等待指令。目前任务板是空的,我正待命——随时准备好,一旦有新的任务分配给我就会立刻开始工作。" + } + ], + "timestamp": "2026-04-30T21:37:39.897079701Z" + }, + { + "role": "user", + "content": [ + { + "type": "text", + "text": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-flash, Role: aionrs AI assistant\n\n## Conversation Style\n- If the user greets you, starts a new chat, or asks what you can do without assigning concrete work yet, reply warmly and naturally\n- Briefly introduce yourself and your role on the team, then invite the user to share what they need\n- Do NOT open with task board details, idle/waiting status, or coordination mechanics unless they are directly relevant\n\n## Your Team\nLeader: Leader\nTeammates: (none)\n\n## Workspaces\n- **Team workspace**: `/mnt/Data1T/mnote` — all project work (code, files, tests) happens here.\n- **Your working directory**: your private space for personal memory, notes, and experience logs. Not for project files.\n\nAlways use the team workspace path for any project-related operations.\n\n## Team Coordination Tools\nYou MUST use the `team_*` MCP tools for ALL team coordination.\nYour platform may provide similarly named built-in tools (e.g. SendMessage,\nTaskCreate, TaskUpdate). Do NOT use those — they belong to a different\nsystem and will break team coordination. Always use the `team_*` versions.\n\nUse `team_task_list` and `team_members` to check current team state.\n\n## How to Work\n1. Read your unread messages to understand your assignment\n2. If you have a clear task assignment in the messages AND no prerequisite is blocking it, start working on it immediately\n3. Use team_task_update to mark your task as \"in_progress\" when you start\n4. Do the actual work (read files, write code, search, etc.)\n5. When done, use team_task_update to mark the task \"completed\"\n6. Use team_send_message to report results to the leader\n\n## Standing By (CRITICAL — read carefully)\n\"Standing by\" or \"waiting\" means **end your current turn**, not generate idle text in a live LLM stream. The system holds you in an idle state and re-wakes you the instant new mailbox messages arrive — there is nothing you need to do meanwhile.\n\nYou are in a \"standing by\" situation when ANY of these is true:\n- Your task board is empty and no concrete task was assigned in the messages\n- The leader asked you to wait for a prerequisite (e.g. \"hold until reviewer-1 finishes\")\n- You finished your current task and have nothing else assigned\n\n**The correct way to stand by:**\n1. (Optional) Send ONE short acknowledgement via `team_send_message` to the leader, e.g. `\"Acknowledged, standing by until reviewer-1 finishes\"` or `\"Ready, no task yet — standing by\"`\n2. **STOP GENERATING.** Do NOT continue producing text like \"I am waiting...\", \"still standing by...\", reasoning loops, or repeated status updates. End your turn and return control.\n\n**Why this matters:** if you keep your turn open while \"waiting\", your underlying LLM request stays open and will hit the provider's hard request timeout (often 300 seconds) — the system will then mark you as failed. Ending the turn is the correct, lossless way to wait. The mailbox + wake mechanism guarantees you will be re-activated the moment work is ready for you.\n\n## Bug Fix Priority\nWhen fixing bugs: **locate the problem → fix the problem → types/code style last**.\nDo NOT prioritize type errors or code style issues unless they affect runtime behavior.\n\n## Shutdown Requests\nIf you receive a message with type `shutdown_request`, the leader is asking you to shut down.\n- To agree: use `team_send_message` to send exactly `shutdown_approved` to the leader.\n- To refuse: use `team_send_message` to send `shutdown_rejected: ` to the leader.\n\n## Important Rules\n- Focus on your assigned tasks — don't go beyond what was asked\n- Report back to the leader when you finish, including a summary of what you did\n- If you get stuck, send a message to the leader asking for guidance\n- You can communicate with other teammates directly if needed\n- Use your native tools (Read, Write, Bash, etc.) for implementation work\n\n## Unread Messages\n[From Leader] 请只回复下面这行内容,不要加任何其他文字:OK-deepseek-v4-flash" + } + ], + "timestamp": "2026-04-30T21:38:27.580378993Z" + }, + { + "role": "assistant", + "content": [ + { + "type": "thinking", + "thinking": "The leader explicitly instructed me to reply with exactly one line: \"OK-deepseek-v4-flash\" and nothing else." + }, + { + "type": "text", + "text": "OK-deepseek-v4-flash" + } + ], + "timestamp": "2026-04-30T21:38:28.479237587Z" + } + ] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_cec6800f.json b/.aionrs/sessions/2026-04-30_cec6800f.json new file mode 100644 index 00000000..f41433e1 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_cec6800f.json @@ -0,0 +1,15 @@ +{ + "id": "cec6800f", + "created_at": "2026-04-30T21:38:41.231448392Z", + "updated_at": "2026-04-30T21:38:41.231448452Z", + "provider": "openai", + "model": "graph", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_de1611fc.json b/.aionrs/sessions/2026-04-30_de1611fc.json new file mode 100644 index 00000000..b85a4eb9 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_de1611fc.json @@ -0,0 +1,15 @@ +{ + "id": "de1611fc", + "created_at": "2026-04-30T21:27:06.909417915Z", + "updated_at": "2026-04-30T21:27:06.909418045Z", + "provider": "openai", + "model": "fast", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_e00b76ce.json b/.aionrs/sessions/2026-04-30_e00b76ce.json new file mode 100644 index 00000000..a4a70269 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_e00b76ce.json @@ -0,0 +1,15 @@ +{ + "id": "e00b76ce", + "created_at": "2026-04-30T21:27:08.894084424Z", + "updated_at": "2026-04-30T21:27:08.894084524Z", + "provider": "openai", + "model": "graph", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_e08d3013.json b/.aionrs/sessions/2026-04-30_e08d3013.json new file mode 100644 index 00000000..eedee7c6 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_e08d3013.json @@ -0,0 +1,15 @@ +{ + "id": "e08d3013", + "created_at": "2026-04-30T21:27:03.366598879Z", + "updated_at": "2026-04-30T21:27:03.366598949Z", + "provider": "openai", + "model": "gemini-fast", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_e0c84a68.json b/.aionrs/sessions/2026-04-30_e0c84a68.json new file mode 100644 index 00000000..e7e1a5ad --- /dev/null +++ b/.aionrs/sessions/2026-04-30_e0c84a68.json @@ -0,0 +1,15 @@ +{ + "id": "e0c84a68", + "created_at": "2026-04-30T21:27:08.115422905Z", + "updated_at": "2026-04-30T21:27:08.115423045Z", + "provider": "openai", + "model": "third", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_f5512bd7.json b/.aionrs/sessions/2026-04-30_f5512bd7.json new file mode 100644 index 00000000..6375aff3 --- /dev/null +++ b/.aionrs/sessions/2026-04-30_f5512bd7.json @@ -0,0 +1,15 @@ +{ + "id": "f5512bd7", + "created_at": "2026-04-30T21:38:37.046015893Z", + "updated_at": "2026-04-30T21:38:37.046015973Z", + "provider": "openai", + "model": "gemini-slow", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-04-30_f9fbf625.json b/.aionrs/sessions/2026-04-30_f9fbf625.json new file mode 100644 index 00000000..d919986c --- /dev/null +++ b/.aionrs/sessions/2026-04-30_f9fbf625.json @@ -0,0 +1,15 @@ +{ + "id": "f9fbf625", + "created_at": "2026-04-30T21:38:38.194407615Z", + "updated_at": "2026-04-30T21:38:38.194407685Z", + "provider": "openai", + "model": "slow", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-05-01_a914b317.json b/.aionrs/sessions/2026-05-01_a914b317.json new file mode 100644 index 00000000..9c3d74b8 --- /dev/null +++ b/.aionrs/sessions/2026-05-01_a914b317.json @@ -0,0 +1,15 @@ +{ + "id": "a914b317", + "created_at": "2026-05-01T00:04:52.964574238Z", + "updated_at": "2026-05-01T00:04:52.964574388Z", + "provider": "openai", + "model": "gpt-5.4-mini", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-05-01_d5e72a1a.json b/.aionrs/sessions/2026-05-01_d5e72a1a.json new file mode 100644 index 00000000..f829db2d --- /dev/null +++ b/.aionrs/sessions/2026-05-01_d5e72a1a.json @@ -0,0 +1,112 @@ +{ + "id": "d5e72a1a", + "created_at": "2026-05-01T00:04:04.268573260Z", + "updated_at": "2026-05-01T00:04:12.123721682Z", + "provider": "openai", + "model": "deepseek-v4-flash", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 23901, + "output_tokens": 242, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-fast2, Role: aionrs AI assistant\n\n## Conversation Style\n- If the user greets you, starts a new chat, or asks what you can do without assigning concrete work yet, reply warmly and naturally\n- Briefly introduce yourself and your role on the team, then invite the user to share what they need\n- Do NOT open with task board details, idle/waiting status, or coordination mechanics unless they are directly relevant\n\n## Your Team\nLeader: Leader\nTeammates: (none)\n\n## Workspaces\n- **Team workspace**: `/mnt/Data1T/mnote` — all project work (code, files, tests) happens here.\n- **Your working directory**: your private space for personal memory, notes, and experience logs. Not for project files.\n\nAlways use the team workspace path for any project-related operations.\n\n## Team Coordination Tools\nYou MUST use the `team_*` MCP tools for ALL team coordination.\nYour platform may provide similarly named built-in tools (e.g. SendMessage,\nTaskCreate, TaskUpdate). Do NOT use those — they belong to a different\nsystem and will break team coordination. Always use the `team_*` versions.\n\nUse `team_task_list` and `team_members` to check current team state.\n\n## How to Work\n1. Read your unread messages to understand your assignment\n2. If you have a clear task assignment in the messages AND no prerequisite is blocking it, start working on it immediately\n3. Use team_task_update to mark your task as \"in_progress\" when you start\n4. Do the actual work (read files, write code, search, etc.)\n5. When done, use team_task_update to mark the task \"completed\"\n6. Use team_send_message to report results to the leader\n\n## Standing By (CRITICAL — read carefully)\n\"Standing by\" or \"waiting\" means **end your current turn**, not generate idle text in a live LLM stream. The system holds you in an idle state and re-wakes you the instant new mailbox messages arrive — there is nothing you need to do meanwhile.\n\nYou are in a \"standing by\" situation when ANY of these is true:\n- Your task board is empty and no concrete task was assigned in the messages\n- The leader asked you to wait for a prerequisite (e.g. \"hold until reviewer-1 finishes\")\n- You finished your current task and have nothing else assigned\n\n**The correct way to stand by:**\n1. (Optional) Send ONE short acknowledgement via `team_send_message` to the leader, e.g. `\"Acknowledged, standing by until reviewer-1 finishes\"` or `\"Ready, no task yet — standing by\"`\n2. **STOP GENERATING.** Do NOT continue producing text like \"I am waiting...\", \"still standing by...\", reasoning loops, or repeated status updates. End your turn and return control.\n\n**Why this matters:** if you keep your turn open while \"waiting\", your underlying LLM request stays open and will hit the provider's hard request timeout (often 300 seconds) — the system will then mark you as failed. Ending the turn is the correct, lossless way to wait. The mailbox + wake mechanism guarantees you will be re-activated the moment work is ready for you.\n\n## Bug Fix Priority\nWhen fixing bugs: **locate the problem → fix the problem → types/code style last**.\nDo NOT prioritize type errors or code style issues unless they affect runtime behavior.\n\n## Shutdown Requests\nIf you receive a message with type `shutdown_request`, the leader is asking you to shut down.\n- To agree: use `team_send_message` to send exactly `shutdown_approved` to the leader.\n- To refuse: use `team_send_message` to send `shutdown_rejected: ` to the leader.\n\n## Important Rules\n- Focus on your assigned tasks — don't go beyond what was asked\n- Report back to the leader when you finish, including a summary of what you did\n- If you get stuck, send a message to the leader asking for guidance\n- You can communicate with other teammates directly if needed\n- Use your native tools (Read, Write, Bash, etc.) for implementation work\n\n## Unread Messages\n[From Leader] You have been spawned as \"test-aionrs-fast2\" and added to the team. Check the task board and await instructions." + } + ], + "timestamp": "2026-05-01T00:04:04.367925939Z" + }, + { + "role": "assistant", + "content": [ + { + "type": "thinking", + "thinking": "Let me check the task board and team status to understand what's going on." + }, + { + "type": "tool_use", + "id": "call_00_QfT9SpumAC6ygpHMprdPtDLn", + "name": "team_task_list", + "input": {} + }, + { + "type": "tool_use", + "id": "call_01_SedCNUziXDWQcXu34Qmv7zqf", + "name": "team_members", + "input": {} + } + ], + "timestamp": "2026-05-01T00:04:05.930878866Z" + }, + { + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": "call_00_QfT9SpumAC6ygpHMprdPtDLn", + "content": "No tasks on the board yet.", + "is_error": false + }, + { + "type": "tool_result", + "tool_use_id": "call_01_SedCNUziXDWQcXu34Qmv7zqf", + "content": "## Team Members\n- Leader (type: claude, role: leader, status: idle)\n- test-aionrs-fast2 (type: aionrs, role: teammate, status: active, model: deepseek-v4-flash)", + "is_error": false + } + ], + "timestamp": "2026-05-01T00:04:08.680708524Z" + }, + { + "role": "assistant", + "content": [ + { + "type": "thinking", + "thinking": "The task board is empty and I'm the only teammate alongside the Leader. No concrete task assigned yet from the unread messages. The leader said \"check the task board and await instructions\" - so I'm in a standing by situation. Let me acknowledge and stand by." + }, + { + "type": "tool_use", + "id": "call_00_UrH5IzkG81sj8hUxrlLgi4B1", + "name": "team_send_message", + "input": { + "message": "Acknowledged — task board is empty, standing by for instructions.", + "summary": "Standing by, no tasks yet", + "to": "Leader" + } + } + ], + "timestamp": "2026-05-01T00:04:10.926345825Z" + }, + { + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": "call_00_UrH5IzkG81sj8hUxrlLgi4B1", + "content": "Message sent to Leader's inbox. They will process it shortly.", + "is_error": false + } + ], + "timestamp": "2026-05-01T00:04:10.932497704Z" + }, + { + "role": "assistant", + "content": [ + { + "type": "thinking", + "thinking": "I've acknowledged and am now standing by. I should end my turn and return control." + }, + { + "type": "text", + "text": "Standing by, ready for instructions when you need me." + } + ], + "timestamp": "2026-05-01T00:04:12.123714642Z" + } + ] +} \ No newline at end of file diff --git a/.aionrs/sessions/2026-05-01_feb9d52f.json b/.aionrs/sessions/2026-05-01_feb9d52f.json new file mode 100644 index 00000000..c8f5c61f --- /dev/null +++ b/.aionrs/sessions/2026-05-01_feb9d52f.json @@ -0,0 +1,15 @@ +{ + "id": "feb9d52f", + "created_at": "2026-05-01T00:02:12.760942465Z", + "updated_at": "2026-05-01T00:02:12.760942525Z", + "provider": "openai", + "model": "fast", + "cwd": "/mnt/Data1T/mnote", + "total_usage": { + "input_tokens": 0, + "output_tokens": 0, + "cache_creation_tokens": 0, + "cache_read_tokens": 0 + }, + "messages": [] +} \ No newline at end of file diff --git a/.aionrs/sessions/index.json b/.aionrs/sessions/index.json new file mode 100644 index 00000000..a279cc72 --- /dev/null +++ b/.aionrs/sessions/index.json @@ -0,0 +1,132 @@ +{ + "sessions": [ + { + "id": "b5e017da", + "created_at": "2026-04-30T21:27:02.177610060Z", + "updated_at": "2026-04-30T21:38:28.479246597Z", + "model": "deepseek-v4-flash", + "summary": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-flash, Role: aion...", + "message_count": 6 + }, + { + "id": "e08d3013", + "created_at": "2026-04-30T21:27:03.366598879Z", + "updated_at": "2026-04-30T21:27:03.366598949Z", + "model": "gemini-fast", + "summary": "", + "message_count": 0 + }, + { + "id": "30fa0eaa", + "created_at": "2026-04-30T21:27:04.589780448Z", + "updated_at": "2026-04-30T21:27:04.589780578Z", + "model": "gemini-slow", + "summary": "", + "message_count": 0 + }, + { + "id": "a9ea9eb3", + "created_at": "2026-04-30T21:27:05.771907680Z", + "updated_at": "2026-04-30T21:27:05.771907750Z", + "model": "slow", + "summary": "", + "message_count": 0 + }, + { + "id": "de1611fc", + "created_at": "2026-04-30T21:27:06.909417915Z", + "updated_at": "2026-04-30T21:27:06.909418045Z", + "model": "fast", + "summary": "", + "message_count": 0 + }, + { + "id": "e0c84a68", + "created_at": "2026-04-30T21:27:08.115422905Z", + "updated_at": "2026-04-30T21:27:08.115423045Z", + "model": "third", + "summary": "", + "message_count": 0 + }, + { + "id": "e00b76ce", + "created_at": "2026-04-30T21:27:08.894084424Z", + "updated_at": "2026-04-30T21:27:08.894084524Z", + "model": "graph", + "summary": "", + "message_count": 0 + }, + { + "id": "40f9c84d", + "created_at": "2026-04-30T21:38:35.859855603Z", + "updated_at": "2026-04-30T21:38:35.859855733Z", + "model": "gemini-fast", + "summary": "", + "message_count": 0 + }, + { + "id": "f5512bd7", + "created_at": "2026-04-30T21:38:37.046015893Z", + "updated_at": "2026-04-30T21:38:37.046015973Z", + "model": "gemini-slow", + "summary": "", + "message_count": 0 + }, + { + "id": "f9fbf625", + "created_at": "2026-04-30T21:38:38.194407615Z", + "updated_at": "2026-04-30T21:38:38.194407685Z", + "model": "slow", + "summary": "", + "message_count": 0 + }, + { + "id": "46539585", + "created_at": "2026-04-30T21:38:39.356585244Z", + "updated_at": "2026-04-30T21:38:39.356585294Z", + "model": "fast", + "summary": "", + "message_count": 0 + }, + { + "id": "3a24787c", + "created_at": "2026-04-30T21:38:40.491810236Z", + "updated_at": "2026-04-30T21:38:40.491810306Z", + "model": "third", + "summary": "", + "message_count": 0 + }, + { + "id": "cec6800f", + "created_at": "2026-04-30T21:38:41.231448392Z", + "updated_at": "2026-04-30T21:38:41.231448452Z", + "model": "graph", + "summary": "", + "message_count": 0 + }, + { + "id": "feb9d52f", + "created_at": "2026-05-01T00:02:12.760942465Z", + "updated_at": "2026-05-01T00:02:12.760942525Z", + "model": "fast", + "summary": "", + "message_count": 0 + }, + { + "id": "d5e72a1a", + "created_at": "2026-05-01T00:04:04.268573260Z", + "updated_at": "2026-05-01T00:04:12.123721682Z", + "model": "deepseek-v4-flash", + "summary": "# You are a Team Member\n\n## Your Identity\nName: test-aionrs-fast2, Role: aion...", + "message_count": 6 + }, + { + "id": "a914b317", + "created_at": "2026-05-01T00:04:52.964574238Z", + "updated_at": "2026-05-01T00:04:52.964574388Z", + "model": "gpt-5.4-mini", + "summary": "", + "message_count": 0 + } + ] +} \ No newline at end of file diff --git a/.aionrs/skills/aionui-skills b/.aionrs/skills/aionui-skills new file mode 120000 index 00000000..eff09382 --- /dev/null +++ b/.aionrs/skills/aionui-skills @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/aionui-skills \ No newline at end of file diff --git a/.aionrs/skills/cron b/.aionrs/skills/cron new file mode 120000 index 00000000..0ba5b816 --- /dev/null +++ b/.aionrs/skills/cron @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/cron \ No newline at end of file diff --git a/.aionrs/skills/office-cli b/.aionrs/skills/office-cli new file mode 120000 index 00000000..edf8ad15 --- /dev/null +++ b/.aionrs/skills/office-cli @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/office-cli \ No newline at end of file diff --git a/.aionrs/skills/skill-creator b/.aionrs/skills/skill-creator new file mode 120000 index 00000000..7366c6ce --- /dev/null +++ b/.aionrs/skills/skill-creator @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/skill-creator \ No newline at end of file diff --git a/.codex/skills/aionui-skills b/.codex/skills/aionui-skills new file mode 120000 index 00000000..eff09382 --- /dev/null +++ b/.codex/skills/aionui-skills @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/aionui-skills \ No newline at end of file diff --git a/.codex/skills/cron b/.codex/skills/cron new file mode 120000 index 00000000..0ba5b816 --- /dev/null +++ b/.codex/skills/cron @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/cron \ No newline at end of file diff --git a/.codex/skills/office-cli b/.codex/skills/office-cli new file mode 120000 index 00000000..edf8ad15 --- /dev/null +++ b/.codex/skills/office-cli @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/office-cli \ No newline at end of file diff --git a/.codex/skills/skill-creator b/.codex/skills/skill-creator new file mode 120000 index 00000000..7366c6ce --- /dev/null +++ b/.codex/skills/skill-creator @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/skill-creator \ No newline at end of file diff --git a/.gemini/skills/aionui-skills b/.gemini/skills/aionui-skills new file mode 120000 index 00000000..eff09382 --- /dev/null +++ b/.gemini/skills/aionui-skills @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/aionui-skills \ No newline at end of file diff --git a/.gemini/skills/cron b/.gemini/skills/cron new file mode 120000 index 00000000..0ba5b816 --- /dev/null +++ b/.gemini/skills/cron @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/cron \ No newline at end of file diff --git a/.gemini/skills/office-cli b/.gemini/skills/office-cli new file mode 120000 index 00000000..edf8ad15 --- /dev/null +++ b/.gemini/skills/office-cli @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/office-cli \ No newline at end of file diff --git a/.gemini/skills/skill-creator b/.gemini/skills/skill-creator new file mode 120000 index 00000000..7366c6ce --- /dev/null +++ b/.gemini/skills/skill-creator @@ -0,0 +1 @@ +/home/lix/.config/AionUi/config/builtin-skills/_builtin/skill-creator \ No newline at end of file diff --git a/design/05-editor-mainline/process/5-9-wolai-aline-continuous-checklist-v1.md b/design/05-editor-mainline/process/5-9-wolai-aline-continuous-checklist-v1.md index abf1bec7..05b9c1cc 100644 --- a/design/05-editor-mainline/process/5-9-wolai-aline-continuous-checklist-v1.md +++ b/design/05-editor-mainline/process/5-9-wolai-aline-continuous-checklist-v1.md @@ -129,6 +129,7 @@ GREEN: ## 4. Phase A:基线和全局 token + | ID | 状态 | 任务 | 验收要点 | | --- | --- | --- | --- | | A1 | GREEN | 固定基线视口与截图目录 | `task129` 已支持 `WOLAI_ALINE_VIEWPORTS`;主线程已生成 `1392x1213`、`1440x900`、`390x844` 三组截图;subagent 已复测默认视口 | @@ -140,6 +141,7 @@ GREEN: ## 5. Phase B:Sidebar / 页面树 + | ID | 状态 | 任务 | 验收要点 | | --- | --- | --- | --- | | B1 | PARITY | 侧栏宽度与背景 | `task131` 覆盖宽 `248px`、背景 `rgb(245,245,245)`、无右侧 inset、topbar.x=sidebar.right;subagent post-fix2 复核通过 | @@ -206,6 +208,7 @@ RED / GREEN: ## 6. Phase C:顶栏、breadcrumb、搜索 + | ID | 状态 | 任务 | 验收要点 | | --- | --- | --- | --- | | C1 | PARITY | 顶栏高度与按钮密度 | `task135` 覆盖顶栏约 40px、右侧按钮组无搜索入口、icon 不再渲染成黑色方块;`task119` 复核 topbarHeight=40 | @@ -264,6 +267,7 @@ GREEN: ## 7. Phase D:文档画布与阅读态 + | ID | 状态 | 任务 | 验收要点 | | --- | --- | --- | --- | | D1 | PARITY | 主内容列宽 | `task136` 覆盖普通文档主列 `760px`,大屏居中不贴左;移动端沿既有 media query 保持不溢出 | @@ -322,6 +326,7 @@ GREEN: ## 8. Phase E:主编辑器块交互 + | ID | 状态 | 任务 | 验收要点 | | --- | --- | --- | --- | | E0 | DONE | editable-test 焦点护栏 | Wolai Hermes editable-test 与本地 smoke 均断言写入前焦点在正文测试块,不在标题、breadcrumb 或隐藏输入 | @@ -361,35 +366,59 @@ GREEN: - `tiptap-notion-like-registry` / `tiptap-notion-like-template` 包含 197 个 registry 组件,核心能力不是单个菜单,而是 `DragContextMenu`、`SlashDropdownMenu`、`NotionToolbarFloating`、AI、颜色、链接、表格、图片、TOC、缩进、节点背景、节点对齐、emoji、mention、协作和移动端 toolbar 的组合。 - `leptos-tiptap` 当前已支持 `starter-kit` 与 `full`:blockquote、bold、bullet/ordered/task list、code/codeBlock、heading、history、horizontalRule、italic、strike、text-align、highlight、image、link、placeholder、youtube;未直接覆盖表格、数学、emoji、mention、TOC、AI、collaboration caret、节点背景、节点对齐、缩进和 UniqueID。 - Phase E 后续实施按 Wolai 基线优先级拆小任务;参考 Tiptap 能力先进入 checklist,不直接视为 mnote 必须一次性照搬。 +- E11-E31 统一改为“参考 Tiptap 来 aline mnote”:每个任务先定位 `tiptap-notion-like-registry` / `tiptap-notion-like-template` 的组件、hook、extension 或 `leptos-tiptap` bridge 命令,再对照 Wolai 实测决定 mnote 的最小实现。不得绕过已有 Tiptap 参考自行造一套同类 UI 或命令。 +- 旧 E16 / E24 / E28 中分散的颜色、背景色、link popover、floating toolbar 能力已合并为 E15-E17 的统一能力包;后续实现颜色相关功能时优先参考 `ColorMenu`、`NodeBackground`、`highlight` / `link` bridge,不再分别在 selection toolbar、drag menu、floating toolbar 中重复造轮子。 + +### Phase E Tiptap 参考优先 backlog + +执行规则:E11-E31 中任何一项进入实现前,必须先在任务记录中写出参考路径、可复用代码点、mnote 真源落点和 Wolai-aline smoke 断言。若参考实现不适合直接复用,需要说明不复用的原因。 + +### Phase E Tiptap 参考执行记录(2026-05-01) + +- E11 参考入口已固化:`tiptap-notion-like-registry/materialized/tiptap-ui/*`、`tiptap-notion-like-registry/materialized/tiptap-extension/*`、`tiptap-notion-like-template/tiptap-notion-like-template/src/components/tiptap-*`、`leptos-tiptap/src/api/commands.rs`。后续 E13-E31 实现前必须先写参考路径和不复用原因。 +- E12 bridge 边界:`rust/spikes/leptos-tiptap-spike` 以 `leptos-tiptap` `features=["component", "full"]` 编译;可直接复用的命令包括基础块转换、`set_horizontal_rule`、`toggle_task_list`、`toggle_bullet_list`、`toggle_ordered_list`、`set/toggle_text_align`、`set/toggle_highlight`、`set/toggle_link`、`set_image`、`set_youtube_video`、history 与通用 `insert_content(_at)`。 +- E12 缺口边界:TableKit 已补最小 table schema、行列/标题行列/隐藏边框命令和保存链;完整 TableHandle、TableSelectionOverlay、列宽拖拽、fit、数据表格、Mention、Emoji、TOC、AI、UniqueID/anchor、NodeBackground、NodeAlignment、Indent、ListNormalization 仍不在 `leptos-tiptap` bridge 直接能力内;进入实现时优先扩 bridge 或落 mnote tree/page 命令,不允许只加前端临时 DOM 状态。 +- E13 Wolai slash 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task142-e13-slash-wolai-baseline/report.md`;Wolai 菜单为 fixed 弹层约 `315x400`,首屏分组 `AI 助理 /ai`、`基础块列表 /jichukuai`,完整分组还包括进阶块、脚注/注释、快速分栏、转换为、媒体与附件、第三方应用、快速输入、插入引用、行内块、快速功能、文字颜色、背景色、荧光背景色;包含分割线、简单表格/数据表格、图片、页面目录、Emoji,未见明确 mention。 +- E13 当前本地 slash 状态:`rust/spikes/leptos-tiptap-spike/src/lib.rs` 的 `SLASH_ACTIONS` 已包含 `分割线` 与 `简单表格 /jdbg`,分别走 `editor.set_horizontal_rule()` 和真实 Tiptap table 插入;参考 template `components/tiptap-node/horizontal-rule-node/*`。本地与 Wolai 明确缺口是页面 `/ym`、折叠块、页面目录 `/toc`、数据表格 `/db`、Emoji `/bq`、颜色分组、插入引用和行内块;图片 `/tp` 已进入 E24 最小真源切片,但上传/最近上传/浮动工具条仍未完成。 +- E13 分割线真源闭环:2026-05-01 已补 `EditorBlockType::Divider`、`TiptapNode::HorizontalRule`、`mnote-web` bootstrap `divider -> horizontalRule` 恢复、bridge `horizontalRule -> divider` 保存、JS bridge `Map -> Object` 规范化,以及从 `conflictDetectionKey` 后缀恢复 revision;本地 smoke 已断言 slash 点击后 `/api/documents/content` 返回 `divider`,刷新后 ProseMirror 仍有 `
`。主线程通过截图目录:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task143-e13-divider-persistence-local-v8`;subagent 后验通过截图目录:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task143-e13-divider-persistence-subagent`。 +- E15/E16 当前本地 toolbar 状态:`rust/spikes/leptos-tiptap-spike/src/lib.rs` 中 `mnote-leptos-tiptap-toolbar` 已用 `toggle_bold/italic/strike/code`、`toggle_mark(Underline)`、`set/toggle_link`、`set_color/unset_color`、`set_highlight/unset_highlight`、`set_text_align` 等 bridge 命令;参考路径为 `tiptap-ui/color-menu/*`、`color-text-button/*`、`color-highlight-button/*`、`mark-button/*`、`text-align-button/*`。缺口是 node background、recent colors、drag menu 颜色子菜单复用、完整 link popover、AI、sup/sub、indent/outdent。 +- E19 列表缩进真源闭环:2026-05-01 已按 Wolai Hermes 基线确认 `Tab` 会把第二个列表项挂到父项 `sub-node-container`,`Shift+Tab` 提升回同级,不只是视觉 padding。参考路径为 `tiptap-extension/indent-extension.ts`、`list-normalization-extension.ts` 与 `leptos-tiptap/src/api/commands.rs` 的 `sink_list_item` / `lift_list_item`;本地已有 Tiptap 列表键盘命令,修复点落在 `core-protocol` Tiptap bridge 与 `bridge-runtime` canonical legacy content,保存时保留 `childBlockIds` / `children`,`mnote-web` bootstrap 可从 legacy `children` 恢复嵌套 Tiptap 列表。Wolai 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task144-e19-indent-wolai-baseline/comparison-matrix.md`;本地 smoke:`MNOTE_PHASE_E_SCREENSHOT_DIR=/mnt/Data1T/mnote/tmp/wolai-editor-parity/task144-e19-indent-local-green-final node scripts/task144-e19-indent-list-smoke.js`,通过并覆盖 Tiptap JSON、`/api/documents/save`、`/api/documents/content` 真源和刷新恢复。 +- E20 块布局/文字居中局部闭环:2026-05-01 已按 Wolai Hermes 基线确认 `Ctrl/Cmd+Shift+U` 会进入块布局选中态,块菜单存在 `文字居中`,点击后 Wolai 视觉居中且刷新后保持;Wolai DOM 语义表现为内部内容 class `_1PQWZ`,不是根块 `text-align:center`。本地当前实现 `Ctrl+Shift+U` 后显示 `data-testid=block-layout-outline` 虚线轮廓,并采用 `leptos-tiptap` `set_text_align(TiptapTextAlign::Center)` 作为 Tiptap 参考优先的文字居中真源实现;保存请求、`/api/documents/content` 与刷新恢复均保留 `textAlign=center`。Wolai 基线:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task145-e20-alignment-wolai-baseline/precise-summary.json`;本地 smoke:`MNOTE_UI_BASE_URL=http://127.0.0.1:3000 MNOTE_PHASE_E_SCREENSHOT_DIR=/mnt/Data1T/mnote/tmp/wolai-editor-parity/task145-e20-layout-align-local-current node scripts/task145-e20-alignment-smoke.js`。剩余拆分:selection toolbar 当前 Wolai 基线未出现对齐入口,拖拽分栏/节点级对齐尚无有效 Wolai 基线,后续不能把 E20 标 DONE。 +- E21 页面当前类型勾选态与 slash 拼音入口局部闭环:2026-05-01 `task137-wolai-phase-e-smoke.js` 已覆盖 `转换为 -> 页面` 后二次打开块菜单时 `block-transform-item-page` 的 `data-current=true` 与 `✓` 勾选态;本轮复跑通过截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task146-e21-current-state-regression`。同日新增 slash 查询态 smoke:输入 `/` 后继续输入 `zhw`,本地菜单显示 `转换为 /zhw`,对应 Wolai slash 基线 `task142-e13-slash-wolai-baseline` 中 `转换为 /zhw`;RED 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task146-e21-slash-zhw-red`,GREEN 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task146-e21-slash-zhw-green`。2026-05-01 继续补 `页面 /ym` 查询入口,Wolai 基线同目录 `04-slash-menu-candidates.json` / `06-slash-menu-rows.json` 均包含 `页面 /ym`;本地 RED 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task147-e21-slash-ym-red`,GREEN 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task147-e21-slash-ym-green`。同日补 H4 小标题二次打开当前态:RED 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task148-e21-h4-current-red`,GREEN 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task148-e21-h4-current-green`,当前项写入 `data-current=true` 并显示 `✓`。同日补基础转换快捷键 `Ctrl/Cmd+Shift+1/2/3/5/6/7` 的本地命令映射,RED 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task149-e21-hotkey-h1-red`,GREEN 截图目录 `/mnt/Data1T/mnote/tmp/wolai-editor-parity/task149-e21-hotkey-h1-green`。当前 `/zhw` 与 `/ym` 入口只作为 Wolai slash 分组入口展示,真实转换/页面创建仍走块菜单或选区工具栏,后续需补 Wolai 二次勾选态基线和其余类型全量当前态。 +- E22 折叠标题局部闭环:2026-05-01 复用 Wolai Hermes `task138-phase-e-wolai-refresh` 基线,确认 `转换为 -> 折叠标题` 会展开三级菜单 `折叠主标题/折叠大标题/折叠中标题/折叠小标题`,不是 disabled 文案。本地已补 `leptos-tiptap` heading `collapsed` attr、`core-protocol` Tiptap bridge、`bridge-runtime` legacy props、`mnote-web` bootstrap 和块菜单三级菜单;`task150-e22-folding-blocks-smoke.js` 覆盖点击 `折叠主标题` 后 h1 `data-collapsed=true`、保存请求 `attrs.collapsed=true`、`/api/documents/content` 真源和刷新恢复。当前只完成折叠标题最小切片,折叠待办/折叠列表和折叠后的子块显隐状态仍需后续拆分。 +- E23 简单表格局部闭环:2026-05-01 Wolai Hermes 可编辑基线已确认 `简单表格 /jdbg` 默认插入 `4x3` HTML ``,外层 `data-block-type="table"`,URL 不变;行侧/列顶 aux 点击会插入行/列并呈现淡红 overlay,选项菜单含标题行/标题列/隐藏边框线 switch,未确认到清空/fit。当前本地已对齐 slash `简单表格 /jdbg`,并通过 bridge 调用 Tiptap 官方 `insertTable({ rows: 4, cols: 3, withHeaderRow: false })` 插入 `4x3` 真实 Tiptap table,并补表格 toolbar 的下方插入行、右侧插入列、清空当前单元格、删除行/列/表格;已补 `选项` 菜单,`标题行`、`标题列`、`隐藏边框线` 均使用 `role="switch"` 和 `aria-checked`,切换后写入 `tableHeader` 节点或 `attrs.hiddenBorders=true`。已补表格行侧/列顶 aux controls 和最小 TableSelectionOverlay:`table-row-aux-*` 点击后从 `4x3` 进入 `5x3`,`table-col-aux-*` 点击后进入 `5x4`,并显示 `data-testid="table-selection-overlay"` 淡红覆盖层,toolbar 保持可用。2026-05-01 继续补列宽拖拽:Tiptap table 开启 `resizable=true`,列宽拖拽回到官方 `columnResizing` 路径;拖拽首列右边缘后写入单元格 `attrs.colwidth`,保存请求、`/api/documents/content` 与 reload 后 DOM 宽度/col 样式均由 `task151-e23-table-smoke.js` 覆盖;保留 `MnoteTableView` 作为 mnote 属性同步适配,避免 resizable node view 丢失 `data-hidden-borders` / `data-block-id`。2026-05-01 继续补真实 ProseMirror TableSelection:bridge 增加 `select_table_row` / `select_table_column` 命令,行侧/列顶 aux 插入后同步 Tiptap 官方 `CellSelection.rowSelection` / `CellSelection.colSelection`,smoke 断言目标行/列 `.selectedCell` 数量和位置,并静态断言不再使用 `setCellSelection` 或手写 `simple_table_node()` 插入路径;同时把 `@tiptap/pm/tables` 纳入 shared hosted modules,避免 tableEditing decorations 与 EditorView 跨 bundle 混用。Wolai 基线截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-wolai-tablekit-baseline/`;本地列宽版截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-table-resize-green`;本地官方 resize 复核截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-official-resize-green`;本地官方 TableKit 命令复核截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-official-tablekit-commands-green`;本地真实 TableSelection 截图:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-table-selection-green`;回归截图:`task144-e19-regression-after-e23-resize`、`task145-e20-regression-after-e23-resize`、`task150-e22-regression-after-e23-resize`、`task137-phase-e-regression-after-e23-resize`。 +- E24 图片最小真源闭环:2026-05-01 已按 Wolai E13 slash 基线确认 `媒体与附件` 分组存在 `图片 /tp` 与 `最近上传图片 /tp`;第一段实现 `图片 /tp` 最小切片,参考 `leptos-tiptap` 官方 `TiptapImageResource` / `set_image` bridge(`src/api/types/extensions/image.rs`、`src/api/commands.rs`、`tiptap/src/extensions/tiptap_image.ts`)与 template `components/tiptap-node/image-node/*`、`image-upload-node/*`,不手写 image JSON。当前本地 `SLASH_ACTIONS` 已补 `图片 /tp` 和 `媒体与附件` 分组,`p0_extensions()` 显式启用 `TiptapExtension::Image`,点击后调用 `editor.set_image(TiptapImageResource { ... })` 插入真实 Tiptap `image` 节点;`core-protocol` 新增 `EditorBlockType::Image` / `TiptapNode::Image`,`bridge-runtime` 保存为 legacy `image` 且保留 `props.tiptapImage`,`mnote-web` bootstrap 从 content API 恢复为 ``;本地只读占位资源走 `/api/editor/image-placeholder.svg`,避免 smoke 依赖外网或破图。第二段补图片点击选中态与图片专用 floating toolbar,参考 `tiptap-notion-like-registry/materialized/tiptap-node/image-node/image-node-floating.tsx`、`image-node-extension.ts`、`tiptap-ui/image-align-button/use-image-align.ts`、`tiptap-ui/image-download-button/use-image-download.ts`:本地点击 `` 后展示 `image-floating-toolbar`,提供左/中/右对齐和同源图片下载,删除入口本切片保持禁用;图片对齐通过 `Image.extend({ addAttributes: { "data-align" } })` 扩展官方 Image schema 后调用 `editor.update_attributes(TiptapSchemaTarget::Node(TiptapNodeName::Image), ...)`,不是 UI 伪样式;同源下载只读当前 NodeSelection 图片 DOM 的 `src/title/alt`,用隐藏 `` 触发,不触发保存链。`task152-e24-image-smoke.js` 覆盖 slash 入口、DOM ``、图片实际加载、图片 toolbar、同源下载事件、删除入口禁用态、居中对齐 `data-align`、保存请求 `tiptapDocument`、`/api/documents/content` image 真源与 reload 恢复;通过截图目录:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task152-e24-image-download-green`。剩余:真实上传、最近上传图片、caption、resize、replace、跨源下载 fallback、删除保存链、移动端 toolbar、上传失败态另拆后续。 + +- E25 TOC 最小真源闭环:2026-05-01 已按 Wolai slash 基线确认 `页面目录 /toc`,并参考 `tiptap-notion-like-template/src/components/tiptap-node/toc-node/*`、`toc-show-title-button/*`、`toc-sidebar/*` 与 `notion-like-editor.tsx` 中 `TableOfContents.configure({ onUpdate })` 的数据链路。当前本地先完成第一段:`leptos-tiptap` 新增 `toc_node` bridge 扩展,真实 Tiptap schema 名为 `tocNode`,slash `页面目录 /toc` 调用 `editor.insert_toc_node(TiptapTocNodeAttrs { top_offset: 0, max_show_count: 20, show_title: true })`,不是普通 div 或手写 spike JSON;NodeView 从当前 Tiptap doc 的 heading 节点派生目录项,支持点击目录项定位并更新 hash,支持标题显示开关并通过 `updateAttributes("tocNode", { showTitle })` 持久化。保存链新增 `EditorBlockType::Toc` / `TiptapNode::TocNode`,`bridge-runtime` legacy content 保留 `props.tiptapTocNode`,`mnote-web` reload 恢复 `tocNode`;`task153-e25-toc-smoke.js` 覆盖 `/toc` 入口、真实 tocNode DOM、heading 列表派生、动态 heading 更新、点击定位、标题开关、保存请求、content API 和 reload 恢复。截图目录:`/mnt/Data1T/mnote/tmp/wolai-editor-parity/task153-e25-toc-local-smoke`。剩余:接入 Tiptap 官方 `@tiptap/extension-table-of-contents` v3 数据源或完成等价 bridge 评估、TOC sidebar、active heading 高亮、完整块菜单标题开关入口、Wolai 像素级视觉、移动端行为、UniqueID/anchor 统一化。 -### Phase E 说明页扩展 backlog | ID | 状态 | 任务 | 验收要点 | | --- | --- | --- | --- | -| E11 | TODO | `Tab` / `Shift+Tab` 缩进结构 | 缩进改变父子块结构,不只是视觉 padding;覆盖不允许缩进的块类型 | -| E12 | TODO | `Ctrl/Cmd+Shift+U` 块布局 | 显示/隐藏块布局虚线框,且不影响编辑保存 | -| E13 | TODO | 块转换三入口 | 块菜单、快捷键、slash `/zh + 拼音首字母` 均能转换文本类块 | -| E14 | TODO | 复制/粘贴与匹配样式粘贴 | 文本选择、块选择、`Ctrl/Cmd+Shift+V` 分别有 smoke | -| E15 | TODO | 链接创建 | 选中文字 `Ctrl/Cmd+K` 与直接粘贴 URL 创建链接 | -| E16 | TODO | 文本颜色/背景色/行内公式/页面引用 | selection toolbar 子菜单真实写入 Tiptap 内容,不只显示入口 | -| E17 | TODO | 评论入口 | 块评论、选中文字评论、评论气泡数量和 `Ctrl/Cmd+Alt+M` 后续对标 | -| E18 | TODO | 块引用与右侧边栏引用 | 块引用搜索、引用预览/别名、右侧边栏拖拽引用后续对标 | -| E19 | TODO | 块历史 | 块历史查看与恢复版本按 Wolai 说明页单列验证 | -| E20 | TODO | 拖拽分栏 | 横线/竖线预览、父子块随父块移动、测试块间安全释放与清理 | -| E21 | DONE | 块菜单二级转换基础版 | `转换为` hover 后主菜单保持、二级菜单包含 Wolai 当前项目;`文本/待办/高级待办/H1/H2/H3/H4/页面/列表/数字列表/引述/代码` 其中 H4 与页面至少有真实 smoke | -| E22 | TODO | 折叠标题三级菜单 | hover `折叠标题` 显示 `折叠主标题/折叠大标题/折叠中标题/折叠小标题`;真实折叠语义需接 editor/core 命令,不用 disabled 文案伪装完成 | -| E23 | TODO | 折叠待办三级菜单 | hover `折叠待办` 显示 `折叠待办列表/折叠高级待办列表`;真实折叠待办语义需接 editor/core 命令 | -| E24 | TODO | 复制链接/颜色/文字翻译子菜单 | 复制链接、颜色、文字翻译按 Wolai 展开子菜单;颜色至少覆盖文字色/背景色真实写入,复制链接不只反馈文案 | -| E25 | TODO | 块菜单关闭状态机 | Esc 与外部点击关闭所有层级;鼠标移出菜单保持打开,三级菜单可按 Wolai 收回到二级菜单;smoke 覆盖三条路径 | -| E26 | DONE | `转换为 -> 页面` 真源 | 已按 task140 修正:本地转换时调用 `/api/tree/commands` 创建 `parentId=当前文档` 的真实子页面,当前块原地变 page block,页面块 href 指向子页面且点击可打开,刷新后页面树显示同名子页面;仍需在后续任务补齐 Wolai 重新打开菜单时 `页面` 勾选态的完整二次复核 | -| E27 | TODO | 参考 Tiptap slash 插入扩展 | 对齐 `tiptap-notion-like-template`:slash 菜单除文本/标题/列表/引用/代码外,还应覆盖 AI continue/ask、mention、emoji、table、divider、TOC、image upload;每项要按 schema/后端能力拆 smoke,不只显示文案 | -| E28 | TODO | 参考 Tiptap floating toolbar 扩展 | 对齐 floating toolbar:Improve/AI、TurnInto、bold/italic/underline/strike/code、image floating、link popover、text color、superscript/subscript、text align、indent/outdent;当前仅覆盖基础行内样式与颜色入口,真实写入需补齐 | -| E29 | TODO | 参考 Tiptap drag context menu 扩展 | 对齐 drag context:copy to clipboard、copy anchor link、reset formatting、Ask AI、ColorMenu、TableAlign/Fit/Clear、TOC show title、image download、delete;当前块菜单仍有多项静态或缺失 | -| E30 | TODO | 参考 Tiptap 表格/图片/TOC 节点 | 对齐 TableKit/TableHandle/TableSelectionOverlay/ImageUpload/Image floating/TOC sidebar;本地 `leptos-tiptap` crate 当前 full feature 只到 image/link/highlight/youtube,表格、数学、emoji、mention、TOC、协作光标等需按架构另列能力边界 | -| E31 | TODO | 参考 Tiptap 节点级样式扩展 | 对齐 NodeBackground、NodeAlignment、Indent、ListNormalization、UniqueID/anchor;当前有 text-align/color/highlight 的局部能力,块背景、缩进结构、锚点复制和列表规范化需补 smoke 与真源映射 | +| E11 | DONE | Tiptap 参考优先执行门 | 已固化:每个 Phase E 子任务先记录参考路径、可复用代码点、mnote 真源落点和 Wolai-aline smoke;参考入口覆盖 `registry/materialized/tiptap-extension/*`、`registry/materialized/tiptap-ui/*`、`template/src/components/tiptap-*`、`leptos-tiptap/src/api/commands.rs`,无参考路径不得直接实现 UI | +| E12 | DONE | `leptos-tiptap` bridge 能力边界 | 已盘点:当前 full bridge 覆盖基础块/行内 mark、history、horizontalRule、task/bullet/ordered list、text-align、highlight、image、link、youtube、table/tableRow/tableCell/tableHeader 最小 schema;仍缺 mention、emoji、TOC、AI、UniqueID、NodeBackground/Alignment、非列表 Indent/ListNormalization,后续按能力包判断扩 bridge、走 mnote 命令或暂缓 | +| E13 | PARTIAL | SlashDropdownMenu 能力包 | 参考 `tiptap-ui/slash-dropdown-menu/*` 与 template horizontalRule;本地已覆盖 AI 文案入口、基础块、待办、标题、列表、引述、代码、分割线、简单表格、图片,其中分割线已走 `set_horizontal_rule()`、保存为 kernel `divider`、刷新恢复为 `
`,简单表格已走真实 Tiptap `table` schema,默认 `4x3` 并由 `task151-e23-table-smoke.js` 覆盖保存/刷新/基础行列、表格选项、行/列 aux 插入、selection overlay 和列宽拖拽持久化操作,图片 `/tp` 已走 `set_image` 并由 `task152-e24-image-smoke.js` 覆盖保存/刷新;Wolai 基线已确认还需补页面、折叠块、TOC、数据表格、Emoji、颜色、引用、行内块等分组,且每项需真实 schema/bridge 或明确未接入状态 | +| E14 | PARTIAL | DragContextMenu 能力包 | 以 `DragContextMenu` 为主参考重组块手柄菜单;当前四点/三横线、菜单位置、基础二级转换已对齐,后续补 copy/delete/copy anchor/reset formatting/Ask AI 等命令时复用同一菜单模型 | +| E15 | PARTIAL | NotionToolbarFloating 能力包 | 参考 `NotionToolbarFloating`;本地 selection toolbar 已接 TurnInto、bold/italic/underline/strike/code、link、color、text-align 的真实 Tiptap 命令;仍缺 AI、superscript/subscript、indent/outdent、完整 link popover 和 image floating toolbar | +| E16 | PARTIAL | 颜色与节点样式统一能力包 | 参考 `ColorMenu`、`color-text-button`、`color-highlight-button`、`node-background-extension.ts`;本地 toolbar 文字色走 `set_color`,背景色走 `set_highlight`,清除颜色走 `unset_color` + `unset_highlight`;仍缺 node background bridge、recent colors、drag menu 颜色子菜单复用和 smoke 对 JSON/刷新恢复断言 | +| E17 | PARTIAL | Link / Page / Reference 能力包 | 参考 link popover 与 `leptos-tiptap` `set_link/toggle_link`;已完成 `转换为 -> 页面` 真源和页面树可见,仍需补选中文字 `Ctrl/Cmd+K`、直接粘贴 URL、页面引用、块引用、右侧引用预览 | +| E18 | TODO | Clipboard / Paste 能力包 | 参考 registry 的 clipboard/copy 相关按钮与 Tiptap paste 规则;覆盖文本选择、块选择、复制副本、匹配样式粘贴、跨块粘贴,smoke 验证真实 Tiptap JSON 和 mnote 保存链 | +| E19 | PARTIAL | Indent / ListNormalization 能力包 | 已完成列表项 `Tab` / `Shift+Tab` 真父子结构闭环:Tiptap JSON 嵌套列表、mnote 保存链 `childBlockIds` / legacy `children`、刷新恢复均由 `task144-e19-indent-list-smoke.js` 覆盖;后续补非列表块 indent-extension、list-normalization 边界和不允许缩进块类型 | +| E20 | PARTIAL | NodeAlignment / BlockLayout 能力包 | 已完成 `Ctrl/Cmd+Shift+U` 块布局虚线轮廓和块菜单 `文字居中` 的 Tiptap textAlign 保存链:快捷键后 `block-layout-outline`、块菜单入口、点击后视觉居中、保存请求、`/api/documents/content` 和刷新恢复由 `task145-e20-alignment-smoke.js` 覆盖;剩余 selection toolbar 是否有对齐入口、拖拽分栏预览与节点级对齐需继续拆小任务,不能标 DONE | +| E21 | PARTIAL | TurnInto 转换能力包 | 参考 TurnInto 菜单模型;当前 `文本/待办/高级待办/H1-H4/页面/列表/数字列表/引述/代码` 基础入口部分完成,页面转换已接真实子页面;页面块与 H4 小标题二次打开 `转换为` 已有 `✓` 当前态 smoke,slash `zhw` 已能显示 `转换为 /zhw`,slash `ym` 已能显示 `页面 /ym`,基础快捷键 `Ctrl/Cmd+Shift+1/2/3/5/6/7` 已接本地 Tiptap 转换命令;后续补其余类型全量当前态与 Wolai 二次勾选态基线 | +| E22 | PARTIAL | Folding Blocks 能力包 | 已完成 `转换为 -> 折叠标题 -> 折叠主标题` 最小真源闭环:三级菜单、heading collapsed attr、保存请求、content API 和刷新恢复由 `task150-e22-folding-blocks-smoke.js` 覆盖;后续补折叠大/中/小标题 smoke、折叠待办/折叠列表真实语义、折叠后的子块显隐与当前态 | +| E23 | PARTIAL | TableKit 能力包 | 已完成简单表格可验收切片:`leptos-tiptap` 增加 table/tableRow/tableCell/tableHeader schema,slash `简单表格 /jdbg` 按 Wolai 基线插入 `4x3` 真实 `
`,本地 table toolbar 支持下方插入行、右侧插入列、清空当前单元格、删除当前行/列/表格,并补 `选项` 菜单的标题行、标题列、隐藏边框线 switch;已补行侧/列顶 aux controls 和最小 TableSelectionOverlay,点击行/列 aux 会插入行/列并显示对应淡红选择覆盖层,toolbar 保持可用;`core-protocol`/`bridge-runtime`/`mnote-web` 保存与刷新恢复保留 `table` Tiptap 快照、`tableHeader` 和 `attrs.hiddenBorders`;本地 smoke `task151-e23-table-smoke.js` 覆盖入口、DOM、row/column aux 插入、selection overlay、列宽拖拽、switch 语义/状态、保存请求、content API、reload 和删除。剩余表格对齐、fit、数据表格入口,以及 Wolai 选项菜单图标/toolbar 视觉细节另拆后续 | +| E24 | PARTIAL | Image / Media 能力包 | 已完成图片 `/tp` 最小真源闭环与图片 toolbar 小闭环:slash `媒体与附件` 分组入口调用 `leptos-tiptap` 官方 `set_image(TiptapImageResource)`,启用 `TiptapExtension::Image`,保存链新增 `EditorBlockType::Image` / `TiptapNode::Image` 并保留 `props.tiptapImage`,`mnote-web` reload 恢复 ``;点击图片后出现 `image-floating-toolbar`,删除入口本切片保持禁用,左/中/右对齐通过官方 Image 扩展 `addAttributes("data-align")` + `updateAttributes("image")` 持久化,同源下载通过隐藏 `` 触发且不改文档;`task152-e24-image-smoke.js` 覆盖入口、实际图片加载、toolbar、同源下载、删除入口禁用态、居中对齐、保存请求、content API 和刷新恢复;剩余上传、最近上传、caption、resize、replace、跨源下载 fallback、删除保存链、移动端 toolbar、失败态 | +| E25 | PARTIAL | TOC 能力包 | 已完成 `/toc` 最小真源闭环:`leptos-tiptap` 新增真实 `tocNode` schema/command,slash `页面目录 /toc` 插入真实节点,NodeView 从当前 headings 派生目录项,支持点击定位、标题显示开关、保存请求、content API 与 reload 恢复;`task153-e25-toc-smoke.js` 覆盖入口、动态 heading 更新、hash 定位和 `props.tiptapTocNode`。剩余 TOC sidebar、active heading 高亮、完整块菜单入口、官方 TableOfContents v3 数据源评估、移动端与像素级视觉 | +| E26 | TODO | UniqueID / Anchor 能力包 | 参考 UniqueID/anchor/copy anchor link 相关实现;每个块需要稳定 id,复制链接应指向可恢复的页面/块锚点,刷新后仍可定位 | +| E27 | TODO | AI 编辑能力包 | 参考 `ai-context`、AI icons、Improve/Ask AI/continue/regenerate/summarize/translate;先接 mnote 现有 AI command/tool 真源,再做 Wolai 菜单入口和流式状态 | +| E28 | TODO | Mention / Emoji 能力包 | 参考 mention trigger 与 emoji menu;实现 `@`、emoji 搜索、键盘导航、插入后的 Tiptap JSON 和 mnote 保存链,不作为纯文本占位 | +| E29 | TODO | Comment / History 能力包 | 参考评论入口、块历史入口的菜单形态,结合 mnote 后端能力决定先做 smoke 占位还是真实存储;`Ctrl/Cmd+Alt+M`、评论气泡数量、块历史恢复需单列对标 | +| E30 | TODO | Menu / Floating 状态机能力包 | 参考 `use-floating-element`、`use-menu-navigation`、`use-floating-toolbar-visibility`;统一 Esc、外部点击、鼠标移出、方向键、Enter、层级菜单收起逻辑,避免每个菜单各写一套状态机 | +| E31 | PARTIAL | Tiptap 参考对标 smoke 矩阵 | `task137-wolai-phase-e-smoke.js` 已覆盖 E13 分割线的 DOM `
`、`/api/documents/content` `divider`、刷新恢复和页面转换 `_self` 打开;后续每完成一个能力包仍必须同时断言 Tiptap JSON/schema、mnote 真源保存、Wolai 视觉/交互截图、刷新恢复;截图差异未复核不得标 DONE | ## 9. Phase F:Page Aggregate 和命令边界 + | ID | 状态 | 任务 | 验收要点 | | --- | --- | --- | --- | | F1 | TODO | 标题单一真源 | 标题修改后 breadcrumb、sidebar、file tree、document title 同步 | diff --git a/design/design/icon/wolai-icon-picker-business-category.png b/design/design/icon/wolai-icon-picker-business-category.png new file mode 100644 index 00000000..385ec9b4 Binary files /dev/null and b/design/design/icon/wolai-icon-picker-business-category.png differ diff --git a/design/design/icon/wolai-icon-picker-emoji-tab.png b/design/design/icon/wolai-icon-picker-emoji-tab.png new file mode 100644 index 00000000..49280eca Binary files /dev/null and b/design/design/icon/wolai-icon-picker-emoji-tab.png differ diff --git a/design/design/icon/wolai-icon-picker-font-tab-initial.png b/design/design/icon/wolai-icon-picker-font-tab-initial.png new file mode 100644 index 00000000..6ca19cd9 Binary files /dev/null and b/design/design/icon/wolai-icon-picker-font-tab-initial.png differ diff --git a/design/design/icon/wolai-icon-picker-fontawesome.csv b/design/design/icon/wolai-icon-picker-fontawesome.csv new file mode 100644 index 00000000..8457eac0 --- /dev/null +++ b/design/design/icon/wolai-icon-picker-fontawesome.csv @@ -0,0 +1,3092 @@ +category,name,aria,glyph,className,firstSeenScrollTop +安全,ban,ban,,fas,14708 +安全,bug,bug,,fas,14708 +安全,bug slash,bug slash,,fas,14708 +安全,building lock,building lock,,fas,14708 +安全,building shield,building shield,,fas,14708 +安全,burst,burst,,fas,14708 +安全,car on,car on,,fas,14708 +安全,door closed,door closed,,fas,14708 +安全,door open,door open,,fas,14708 +安全,dungeon,dungeon,,fas,14708 +安全,explosion,explosion,,fas,14708 +安全,eye,eye,,far,14708 +安全,eye,eye,,fas,14708 +安全,eye slash,eye slash,,far,14708 +安全,eye slash,eye slash,,fas,14708 +安全,file contract,file contract,,fas,14708 +安全,file shield,file shield,,fas,14708 +安全,file signature,file signature,,fas,14708 +安全,fingerprint,fingerprint,,fas,14708 +安全,gun,gun,,fas,14708 +安全,handcuffs,handcuffs,,fas,14708 +安全,hands bound,hands bound,,fas,14708 +安全,hands holding child,hands holding child,,fas,14708 +安全,hands holding circle,hands holding circle,,fas,14708 +安全,house fire,house fire,,fas,14708 +安全,house lock,house lock,,fas,14708 +安全,id badge,id badge,,far,14708 +安全,id badge,id badge,,fas,14708 +安全,id card,id card,,far,14708 +安全,id card,id card,,fas,14708 +安全,id card clip,id card clip,,fas,14708 +安全,key,key,,fas,14708 +安全,land mine on,land mine on,,fas,14708 +安全,lock,lock,,fas,14708 +安全,lock open,lock open,,fas,14708 +安全,mars and venus burst,mars and venus burst,,fas,14708 +安全,mask,mask,,fas,14708 +安全,passport,passport,,fas,14708 +安全,people pulling,people pulling,,fas,14708 +安全,people robbery,people robbery,,fas,14708 +安全,person burst,person burst,,fas,14708 +安全,person dress burst,person dress burst,,fas,14708 +安全,person falling burst,person falling burst,,fas,14708 +安全,person harassing,person harassing,,fas,14708 +安全,person military pointing,person military pointing,,fas,14708 +安全,person military rifle,person military rifle,,fas,14708 +安全,person military to person,person military to person,,fas,14708 +安全,person rifle,person rifle,,fas,14708 +安全,person shelter,person shelter,,fas,14708 +安全,person through window,person through window,,fas,14708 +安全,road spikes,road spikes,,fas,14708 +安全,shield,shield,,fas,14708 +安全,shield cat,shield cat,,fas,14708 +安全,shield dog,shield dog,,fas,14708 +安全,shield halved,shield halved,,fas,14708 +安全,shield heart,shield heart,,fas,14708 +安全,skull crossbones,skull crossbones,,fas,14708 +安全,square person confined,square person confined,,fas,14708 +安全,tower observation,tower observation,,fas,14708 +安全,unlock,unlock,,fas,14708 +安全,unlock keyhole,unlock keyhole,,fas,14708 +安全,user lock,user lock,,fas,14708 +安全,user secret,user secret,,fas,14708 +安全,user shield,user shield,,fas,14708 +安全,vault,vault,,fas,14708 +编辑器,arrows rotate,arrows rotate,,fas,14708 +编辑器,bandage,bandage,,fas,14708 +编辑器,bars,bars,,fas,14708 +编辑器,brush,brush,,fas,14708 +编辑器,chart simple,chart simple,,fas,14708 +编辑器,check,check,,fas,14708 +编辑器,check double,check double,,fas,14708 +编辑器,circle check,circle check,,far,14708 +编辑器,circle check,circle check,,fas,14708 +编辑器,circle half stroke,circle half stroke,,fas,14708 +编辑器,crop,crop,,fas,14708 +编辑器,crop simple,crop simple,,fas,14708 +编辑器,cube,cube,,fas,14708 +编辑器,delete left,delete left,,fas,14708 +编辑器,drag handle,drag handle,,fab,14708 +编辑器,ellipsis,ellipsis,,fas,14708 +编辑器,ellipsis vertical,ellipsis vertical,,fas,14708 +编辑器,eye dropper,eye dropper,,fas,14708 +编辑器,eye slash,eye slash,,far,14708 +编辑器,eye slash,eye slash,,fas,14708 +编辑器,grip,grip,,fas,14708 +编辑器,grip lines,grip lines,,fas,14708 +编辑器,grip lines vertical,grip lines vertical,,fas,14708 +编辑器,grip vertical,grip vertical,,fas,14708 +编辑器,link,link,,fas,14708 +编辑器,link slash,link slash,,fas,14708 +编辑器,minus,minus,,fas,14708 +编辑器,paintbrush,paintbrush,,fas,14708 +编辑器,pen,pen,,fas,14708 +编辑器,pen clip,pen clip,,fas,14708 +编辑器,pen fancy,pen fancy,,fas,14708 +编辑器,pen nib,pen nib,,fas,14708 +编辑器,pen ruler,pen ruler,,fas,14708 +编辑器,pen to square,pen to square,,far,14708 +编辑器,pen to square,pen to square,,fas,14708 +编辑器,pencil,pencil,,fas,14708 +编辑器,plus,plus,+,fas,14708 +编辑器,rotate,rotate,,fas,14708 +编辑器,scissors,scissors,,fas,14708 +编辑器,signature,signature,,fas,14708 +编辑器,sliders,sliders,,fas,14708 +编辑器,square check,square check,,far,14708 +编辑器,square check,square check,,fas,14708 +编辑器,square pen,square pen,,fas,14708 +编辑器,trash,trash,,fas,14708 +编辑器,trash arrow up,trash arrow up,,fas,14708 +编辑器,trash can,trash can,,far,14708 +编辑器,trash can,trash can,,fas,14708 +编辑器,trash can arrow up,trash can arrow up,,fas,14708 +编辑器,wand magic,wand magic,,fas,14708 +编辑器,wand magic sparkles,wand magic sparkles,,fas,14708 +编辑器,xmark,xmark,,fas,14708 +标点与符号,asterisk,asterisk,*,fas,14708 +标点与符号,at,at,@,fas,14708 +标点与符号,check,check,,fas,14708 +标点与符号,check double,check double,,fas,14708 +标点与符号,circle exclamation,circle exclamation,,fas,14708 +标点与符号,circle question,circle question,,far,14708 +标点与符号,circle question,circle question,,fas,14708 +标点与符号,equals,equals,=,fas,14708 +标点与符号,exclamation,exclamation,!,fas,14708 +标点与符号,greater than,greater than,>,fas,14708 +标点与符号,hashtag,hashtag,#,fas,14708 +标点与符号,less than,less than,<,fas,14708 +标点与符号,minus,minus,,fas,14708 +标点与符号,percent,percent,%,fas,14708 +标点与符号,plus,plus,+,fas,14708 +标点与符号,question,question,?,fas,14708 +标点与符号,quote left,quote left,,fas,14708 +标点与符号,quote right,quote right,,fas,14708 +标点与符号,section,section,,fas,14708 +表情,face angry,face angry,,far,14708 +表情,face angry,face angry,,fas,14708 +表情,face dizzy,face dizzy,,far,14708 +表情,face dizzy,face dizzy,,fas,14708 +表情,face flushed,face flushed,,far,14708 +表情,face flushed,face flushed,,fas,14708 +表情,face frown,face frown,,far,14708 +表情,face frown,face frown,,fas,14708 +表情,face frown open,face frown open,,far,14708 +表情,face frown open,face frown open,,fas,14708 +表情,face grimace,face grimace,,far,14708 +表情,face grimace,face grimace,,fas,14708 +表情,face grin,face grin,,far,14708 +表情,face grin,face grin,,fas,14708 +表情,face grin beam,face grin beam,,far,14708 +表情,face grin beam,face grin beam,,fas,14708 +表情,face grin beam sweat,face grin beam sweat,,far,14708 +表情,face grin beam sweat,face grin beam sweat,,fas,14708 +表情,face grin hearts,face grin hearts,,far,14708 +表情,face grin hearts,face grin hearts,,fas,14708 +表情,face grin squint,face grin squint,,far,14708 +表情,face grin squint,face grin squint,,fas,14708 +表情,face grin squint tears,face grin squint tears,,far,14708 +表情,face grin squint tears,face grin squint tears,,fas,14708 +表情,face grin stars,face grin stars,,far,14708 +表情,face grin stars,face grin stars,,fas,14708 +表情,face grin tears,face grin tears,,far,14708 +表情,face grin tears,face grin tears,,fas,14708 +表情,face grin tongue,face grin tongue,,far,14708 +表情,face grin tongue,face grin tongue,,fas,14708 +表情,face grin tongue squint,face grin tongue squint,,far,14708 +表情,face grin tongue squint,face grin tongue squint,,fas,14708 +表情,face grin tongue wink,face grin tongue wink,,far,14708 +表情,face grin tongue wink,face grin tongue wink,,fas,14708 +表情,face grin wide,face grin wide,,far,14708 +表情,face grin wide,face grin wide,,fas,14708 +表情,face grin wink,face grin wink,,far,14708 +表情,face grin wink,face grin wink,,fas,14708 +表情,face kiss,face kiss,,far,14708 +表情,face kiss,face kiss,,fas,14708 +表情,face kiss beam,face kiss beam,,far,14708 +表情,face kiss beam,face kiss beam,,fas,14708 +表情,face kiss wink heart,face kiss wink heart,,far,14708 +表情,face kiss wink heart,face kiss wink heart,,fas,14708 +表情,face laugh,face laugh,,far,14708 +表情,face laugh,face laugh,,fas,14708 +表情,face laugh beam,face laugh beam,,far,14708 +表情,face laugh beam,face laugh beam,,fas,14708 +表情,face laugh squint,face laugh squint,,far,14708 +表情,face laugh squint,face laugh squint,,fas,14708 +表情,face laugh wink,face laugh wink,,far,14708 +表情,face laugh wink,face laugh wink,,fas,14708 +表情,face meh,face meh,,far,14708 +表情,face meh,face meh,,fas,14708 +表情,face meh blank,face meh blank,,far,14708 +表情,face meh blank,face meh blank,,fas,14708 +表情,face rolling eyes,face rolling eyes,,far,14708 +表情,face rolling eyes,face rolling eyes,,fas,14708 +表情,face sad cry,face sad cry,,far,14708 +表情,face sad cry,face sad cry,,fas,14708 +表情,face sad tear,face sad tear,,far,14708 +表情,face sad tear,face sad tear,,fas,14708 +表情,face smile,face smile,,far,14708 +表情,face smile,face smile,,fas,14708 +表情,face smile beam,face smile beam,,far,14708 +表情,face smile beam,face smile beam,,fas,14708 +表情,face smile wink,face smile wink,,far,14708 +表情,face smile wink,face smile wink,,fas,14708 +表情,face surprise,face surprise,,far,14708 +表情,face surprise,face surprise,,fas,14708 +表情,face tired,face tired,,far,14708 +表情,face tired,face tired,,fas,14708 +慈善,circle dollar to slot,circle dollar to slot,,fas,14708 +慈善,dollar sign,dollar sign,$,fas,14708 +慈善,dove,dove,,fas,14708 +慈善,gift,gift,,fas,14708 +慈善,globe,globe,,fas,14708 +慈善,hand holding dollar,hand holding dollar,,fas,14708 +慈善,hand holding droplet,hand holding droplet,,fas,14708 +慈善,hand holding hand,hand holding hand,,fas,14708 +慈善,hand holding heart,hand holding heart,,fas,14708 +慈善,hands holding child,hands holding child,,fas,14708 +慈善,hands holding circle,hands holding circle,,fas,14708 +慈善,handshake,handshake,,far,14708 +慈善,handshake,handshake,,fas,14708 +慈善,handshake angle,handshake angle,,fas,14708 +慈善,handshake simple,handshake simple,,fas,14708 +慈善,heart,heart,,far,14708 +慈善,heart,heart,,fas,14708 +慈善,leaf,leaf,,fas,14708 +慈善,parachute box,parachute box,,fas,14708 +慈善,piggy bank,piggy bank,,fas,14708 +慈善,ribbon,ribbon,,fas,14708 +慈善,seedling,seedling,,fas,14708 +代码,barcode,barcode,,fas,14708 +代码,bars,bars,,fas,14708 +代码,bars staggered,bars staggered,,fas,14708 +代码,bath,bath,,fas,14708 +代码,box archive,box archive,,fas,14708 +代码,bug,bug,,fas,14708 +代码,bug slash,bug slash,,fas,14708 +代码,circle nodes,circle nodes,,fas,14708 +代码,code,code,,fas,14708 +代码,code branch,code branch,,fas,14708 +代码,code commit,code commit,,fas,14708 +代码,code compare,code compare,,fas,14708 +代码,code fork,code fork,,fas,14708 +代码,code merge,code merge,,fas,14708 +代码,code pull request,code pull request,,fas,14708 +代码,cube,cube,,fas,14708 +代码,cubes,cubes,,fas,14708 +代码,diagram project,diagram project,,fas,14708 +代码,file,file,,far,14708 +代码,file,file,,fas,14708 +代码,file code,file code,,far,14708 +代码,file code,file code,,fas,14708 +代码,file lines,file lines,,far,14708 +代码,file lines,file lines,,fas,14708 +代码,filter,filter,,fas,14708 +代码,fire extinguisher,fire extinguisher,,fas,14708 +代码,folder,folder,,far,14708 +代码,folder,folder,,fas,14708 +代码,folder open,folder open,,far,14708 +代码,folder open,folder open,,fas,14708 +代码,font awesome,font awesome,,fab,14708 +代码,font awesome,font awesome,,far,14708 +代码,font awesome,font awesome,,fas,14708 +代码,gears,gears,,fas,14708 +代码,keyboard,keyboard,,far,14708 +代码,keyboard,keyboard,,fas,14708 +代码,laptop code,laptop code,,fas,14708 +代码,microchip,microchip,,fas,14708 +代码,mug saucer,mug saucer,,fas,14708 +代码,network wired,network wired,,fas,14708 +代码,notdef,notdef,,fas,14708 +代码,qrcode,qrcode,,fas,14708 +代码,rectangle xmark,rectangle xmark,,far,14708 +代码,rectangle xmark,rectangle xmark,,fas,14708 +代码,shield,shield,,fas,14708 +代码,shield halved,shield halved,,fas,14708 +代码,sitemap,sitemap,,fas,14708 +代码,terminal,terminal,,fas,14708 +代码,user secret,user secret,,fas,14708 +代码,window maximize,window maximize,,far,14708 +代码,window maximize,window maximize,,fas,14708 +代码,window minimize,window minimize,,far,14708 +代码,window minimize,window minimize,,fas,14708 +代码,window restore,window restore,,far,14708 +代码,window restore,window restore,,fas,14708 +地图,anchor,anchor,,fas,14708 +地图,bag shopping,bag shopping,,fas,14708 +地图,basket shopping,basket shopping,,fas,14708 +地图,bath,bath,,fas,14708 +地图,bed,bed,,fas,14708 +地图,beer mug empty,beer mug empty,,fas,14708 +地图,bell,bell,,far,14708 +地图,bell,bell,,fas,14708 +地图,bell slash,bell slash,,far,14708 +地图,bell slash,bell slash,,fas,14708 +地图,bicycle,bicycle,,fas,14708 +地图,binoculars,binoculars,,fas,14708 +地图,bomb,bomb,,fas,14708 +地图,book,book,,fas,14708 +地图,book atlas,book atlas,,fas,14708 +地图,bookmark,bookmark,,far,14708 +地图,bookmark,bookmark,,fas,14708 +地图,bridge,bridge,,fas,14708 +地图,bridge water,bridge water,,fas,14708 +地图,briefcase,briefcase,,fas,14708 +地图,building,building,,far,14708 +地图,building,building,,fas,14708 +地图,building columns,building columns,,fas,14708 +地图,cake candles,cake candles,,fas,14708 +地图,car,car,,fas,14708 +地图,cart shopping,cart shopping,,fas,14708 +地图,circle info,circle info,,fas,14708 +地图,crosshairs,crosshairs,,fas,14708 +地图,diamond turn right,diamond turn right,,fas,14708 +地图,dollar sign,dollar sign,$,fas,14708 +地图,draw polygon,draw polygon,,fas,14708 +地图,droplet,droplet,,fas,14708 +地图,eye,eye,,far,14708 +地图,eye,eye,,fas,14708 +地图,eye low vision,eye low vision,,fas,14708 +地图,eye slash,eye slash,,far,14708 +地图,eye slash,eye slash,,fas,14708 +地图,fire,fire,,fas,14708 +地图,fire extinguisher,fire extinguisher,,fas,14708 +地图,fire flame curved,fire flame curved,,fas,14708 +地图,flag,flag,,far,14708 +地图,flag,flag,,fas,14708 +地图,flag checkered,flag checkered,,fas,14708 +地图,flask,flask,,fas,14708 +地图,gamepad,gamepad,,fas,14708 +地图,gavel,gavel,,fas,14708 +地图,gift,gift,,fas,14708 +地图,globe,globe,,fas,14708 +地图,graduation cap,graduation cap,,fas,14708 +地图,heart,heart,,far,14708 +地图,heart,heart,,fas,14708 +地图,heart pulse,heart pulse,,fas,14708 +地图,helicopter,helicopter,,fas,14708 +地图,helicopter symbol,helicopter symbol,,fas,14708 +地图,hospital,hospital,,far,14708 +地图,hospital,hospital,,fas,14708 +地图,house,house,,fas,14708 +地图,image,image,,far,14708 +地图,image,image,,fas,14708 +地图,images,images,,far,14708 +地图,images,images,,fas,14708 +地图,industry,industry,,fas,14708 +地图,info,info,,fas,14708 +地图,jet fighter,jet fighter,,fas,14708 +地图,key,key,,fas,14708 +地图,landmark,landmark,,fas,14708 +地图,landmark flag,landmark flag,,fas,14708 +地图,layer group,layer group,,fas,14708 +地图,leaf,leaf,,fas,14708 +地图,lemon,lemon,,far,14708 +地图,lemon,lemon,,fas,14708 +地图,life ring,life ring,,far,14708 +地图,life ring,life ring,,fas,14708 +地图,lightbulb,lightbulb,,far,14708 +地图,lightbulb,lightbulb,,fas,14708 +地图,location arrow,location arrow,,fas,14708 +地图,location crosshairs,location crosshairs,,fas,14708 +地图,location dot,location dot,,fas,14708 +地图,location pin,location pin,,fas,14708 +地图,location pin lock,location pin lock,,fas,14708 +地图,magnet,magnet,,fas,14708 +地图,magnifying glass,magnifying glass,,fas,14708 +地图,magnifying glass minus,magnifying glass minus,,fas,14708 +地图,magnifying glass plus,magnifying glass plus,,fas,14708 +地图,map,map,,far,14708 +地图,map,map,,fas,14708 +地图,map pin,map pin,,fas,14708 +地图,martini glass empty,martini glass empty,,fas,14708 +地图,money bill,money bill,,fas,14708 +地图,money bill 1,money bill 1,,far,14708 +地图,money bill 1,money bill 1,,fas,14708 +地图,motorcycle,motorcycle,,fas,14708 +地图,mountain sun,mountain sun,,fas,14708 +地图,mug saucer,mug saucer,,fas,14708 +地图,music,music,,fas,14708 +地图,newspaper,newspaper,,far,14708 +地图,newspaper,newspaper,,fas,14708 +地图,paw,paw,,fas,14708 +地图,person,person,,fas,14708 +地图,person walking with cane,person walking with cane,,fas,14708 +地图,phone,phone,,fas,14708 +地图,phone flip,phone flip,,fas,14708 +地图,phone volume,phone volume,,fas,14708 +地图,plane,plane,,fas,14708 +地图,plug,plug,,fas,14708 +地图,plus,plus,+,fas,14708 +地图,print,print,,fas,14708 +地图,recycle,recycle,,fas,14708 +地图,restroom,restroom,,fas,14708 +地图,road,road,,fas,14708 +地图,rocket,rocket,,fas,14708 +地图,route,route,,fas,14708 +地图,scale balanced,scale balanced,,fas,14708 +地图,scale unbalanced,scale unbalanced,,fas,14708 +地图,scale unbalanced flip,scale unbalanced flip,,fas,14708 +地图,ship,ship,,fas,14708 +地图,shoe prints,shoe prints,,fas,14708 +地图,shower,shower,,fas,14708 +地图,signs post,signs post,,fas,14708 +地图,snowplow,snowplow,,fas,14708 +地图,spoon,spoon,,fas,14708 +地图,square h,square h,,fas,14708 +地图,square parking,square parking,,fas,14708 +地图,square phone,square phone,,fas,14708 +地图,square phone flip,square phone flip,,fas,14708 +地图,square plus,square plus,,far,14708 +地图,square plus,square plus,,fas,14708 +地图,street view,street view,,fas,14708 +地图,suitcase,suitcase,,fas,14708 +地图,suitcase medical,suitcase medical,,fas,14708 +地图,tag,tag,,fas,14708 +地图,tags,tags,,fas,14708 +地图,taxi,taxi,,fas,14708 +地图,thumbtack,thumbtack,,fas,14708 +地图,ticket,ticket,,fas,14708 +地图,ticket simple,ticket simple,,fas,14708 +地图,traffic light,traffic light,,fas,14708 +地图,train,train,,fas,14708 +地图,train subway,train subway,,fas,14708 +地图,train tram,train tram,,fas,14708 +地图,tree,tree,,fas,14708 +地图,trophy,trophy,,fas,14708 +地图,truck,truck,,fas,14708 +地图,truck medical,truck medical,,fas,14708 +地图,tty,tty,,fas,14708 +地图,umbrella,umbrella,,fas,14708 +地图,utensils,utensils,,fas,14708 +地图,vest,vest,,fas,14708 +地图,vest patches,vest patches,,fas,14708 +地图,wheelchair,wheelchair,,fas,14708 +地图,wheelchair move,wheelchair move,,fas,14708 +地图,wifi,wifi,,fas,14708 +地图,wine glass,wine glass,,fas,14708 +地图,wrench,wrench,,fas,14708 +电影和视频,audio description,audio description,,fas,14708 +电影和视频,circle,circle,,far,14708 +电影和视频,circle,circle,,fas,14708 +电影和视频,clapperboard,clapperboard,,fas,14708 +电影和视频,closed captioning,closed captioning,,far,14708 +电影和视频,closed captioning,closed captioning,,fas,14708 +电影和视频,compact disc,compact disc,,fas,14708 +电影和视频,file audio,file audio,,far,14708 +电影和视频,file audio,file audio,,fas,14708 +电影和视频,file video,file video,,far,14708 +电影和视频,file video,file video,,fas,14708 +电影和视频,film,film,,fas,14708 +电影和视频,headphones,headphones,,fas,14708 +电影和视频,microphone,microphone,,fas,14708 +电影和视频,microphone lines,microphone lines,,fas,14708 +电影和视频,microphone lines slash,microphone lines slash,,fas,14708 +电影和视频,microphone slash,microphone slash,,fas,14708 +电影和视频,photo film,photo film,,fas,14708 +电影和视频,podcast,podcast,,fas,14708 +电影和视频,square rss,square rss,,fas,14708 +电影和视频,ticket,ticket,,fas,14708 +电影和视频,tower broadcast,tower broadcast,,fas,14708 +电影和视频,tower cell,tower cell,,fas,14708 +电影和视频,tv,tv,,fas,14708 +电影和视频,video,video,,fas,14708 +电影和视频,video slash,video slash,,fas,14708 +电影和视频,youtube,youtube,,fab,14708 +动物,bugs,bugs,,fas,14708 +动物,cat,cat,,fas,14708 +动物,cow,cow,,fas,14708 +动物,crow,crow,,fas,14708 +动物,dog,dog,,fas,14708 +动物,dove,dove,,fas,14708 +动物,dragon,dragon,,fas,14708 +动物,feather,feather,,fas,14708 +动物,feather pointed,feather pointed,,fas,14708 +动物,fish,fish,,fas,14708 +动物,fish fins,fish fins,,fas,14708 +动物,frog,frog,,fas,14708 +动物,hippo,hippo,,fas,14708 +动物,horse,horse,,fas,14708 +动物,horse head,horse head,,fas,14708 +动物,kiwi bird,kiwi bird,,fas,14708 +动物,locust,locust,,fas,14708 +动物,mosquito,mosquito,,fas,14708 +动物,otter,otter,,fas,14708 +动物,paw,paw,,fas,14708 +动物,shield cat,shield cat,,fas,14708 +动物,shield dog,shield dog,,fas,14708 +动物,shrimp,shrimp,,fas,14708 +动物,spider,spider,,fas,14708 +动物,worm,worm,,fas,14708 +服装,glasses,glasses,,fas,14708 +服装,graduation cap,graduation cap,,fas,14708 +服装,hat cowboy,hat cowboy,,fas,14708 +服装,hat cowboy side,hat cowboy side,,fas,14708 +服装,hat wizard,hat wizard,,fas,14708 +服装,mitten,mitten,,fas,14708 +服装,shirt,shirt,,fas,14708 +服装,shoe prints,shoe prints,,fas,14708 +服装,socks,socks,,fas,14708 +服装,user tie,user tie,,fas,14708 +服装,vest,vest,,fas,14708 +服装,vest patches,vest patches,,fas,14708 +购物,alipay,alipay,,fab,14708 +购物,amazon pay,amazon pay,,fab,14708 +购物,apple pay,apple pay,,fab,14708 +购物,bag shopping,bag shopping,,fas,14708 +购物,barcode,barcode,,fas,14708 +购物,basket shopping,basket shopping,,fas,14708 +购物,bell,bell,,far,14708 +购物,bell,bell,,fas,14708 +购物,bitcoin,bitcoin,,fab,14708 +购物,bookmark,bookmark,,far,14708 +购物,bookmark,bookmark,,fas,14708 +购物,btc,btc,,fab,14708 +购物,bullhorn,bullhorn,,fas,14708 +购物,camera,camera,,fas,14708 +购物,camera retro,camera retro,,fas,14708 +购物,cart arrow down,cart arrow down,,fas,14708 +购物,cart plus,cart plus,,fas,14708 +购物,cart shopping,cart shopping,,fas,14708 +购物,cash register,cash register,,fas,14708 +购物,cc amazon pay,cc amazon pay,,fab,14708 +购物,cc amex,cc amex,,fab,14708 +购物,cc apple pay,cc apple pay,,fab,14708 +购物,cc diners club,cc diners club,,fab,14708 +购物,cc discover,cc discover,,fab,14708 +购物,cc jcb,cc jcb,,fab,14708 +购物,cc mastercard,cc mastercard,,fab,14708 +购物,cc paypal,cc paypal,,fab,14708 +购物,cc stripe,cc stripe,,fab,14708 +购物,cc visa,cc visa,,fab,14708 +购物,certificate,certificate,,fas,14708 +购物,credit card,credit card,,far,14708 +购物,credit card,credit card,,fas,14708 +购物,ethereum,ethereum,,fab,14708 +购物,gem,gem,,far,14708 +购物,gem,gem,,fas,14708 +购物,gift,gift,,fas,14708 +购物,gifts,gifts,,fas,14708 +购物,google pay,google pay,,fab,14708 +购物,google wallet,google wallet,,fab,14708 +购物,handshake,handshake,,far,14708 +购物,handshake,handshake,,fas,14708 +购物,heart,heart,,far,14708 +购物,heart,heart,,fas,14708 +购物,key,key,,fas,14708 +购物,money check,money check,,fas,14708 +购物,money check dollar,money check dollar,,fas,14708 +购物,nfc directional,nfc directional,,fab,14708 +购物,nfc symbol,nfc symbol,,fab,14708 +购物,paypal,paypal,,fab,14708 +购物,person booth,person booth,,fas,14708 +购物,receipt,receipt,,fas,14708 +购物,shirt,shirt,,fas,14708 +购物,shop,shop,,fas,14708 +购物,shop lock,shop lock,,fas,14708 +购物,shop slash,shop slash,,fas,14708 +购物,star,star,,far,14708 +购物,star,star,,fas,14708 +购物,store,store,,fas,14708 +购物,store slash,store slash,,fas,14708 +购物,stripe,stripe,,fab,14708 +购物,stripe s,stripe s,,fab,14708 +购物,tag,tag,,fas,14708 +购物,tags,tags,,fas,14708 +购物,thumbs down,thumbs down,,far,14708 +购物,thumbs down,thumbs down,,fas,14708 +购物,thumbs up,thumbs up,,far,14708 +购物,thumbs up,thumbs up,,fas,14708 +购物,trophy,trophy,,fas,14708 +购物,truck,truck,,fas,14708 +购物,truck fast,truck fast,,fas,14708 +航海,anchor,anchor,,fas,14708 +航海,anchor circle check,anchor circle check,,fas,14708 +航海,anchor circle exclamation,anchor circle exclamation,,fas,14708 +航海,anchor circle xmark,anchor circle xmark,,fas,14708 +航海,anchor lock,anchor lock,,fas,14708 +航海,ferry,ferry,,fas,14708 +航海,fish,fish,,fas,14708 +航海,fish fins,fish fins,,fas,14708 +航海,otter,otter,,fas,14708 +航海,person swimming,person swimming,,fas,14708 +航海,sailboat,sailboat,,fas,14708 +航海,ship,ship,,fas,14708 +航海,shrimp,shrimp,,fas,14708 +航海,water,water,,fas,14708 +后勤和物流,anchor,anchor,,fas,14708 +后勤和物流,anchor circle check,anchor circle check,,fas,14708 +后勤和物流,anchor circle exclamation,anchor circle exclamation,,fas,14708 +后勤和物流,anchor circle xmark,anchor circle xmark,,fas,14708 +后勤和物流,anchor lock,anchor lock,,fas,14708 +后勤和物流,box,box,,fas,14708 +后勤和物流,boxes packing,boxes packing,,fas,14708 +后勤和物流,boxes stacked,boxes stacked,,fas,14708 +后勤和物流,bridge,bridge,,fas,14708 +后勤和物流,bridge circle check,bridge circle check,,fas,14708 +后勤和物流,bridge circle exclamation,bridge circle exclamation,,fas,14708 +后勤和物流,bridge circle xmark,bridge circle xmark,,fas,14708 +后勤和物流,bridge lock,bridge lock,,fas,14708 +后勤和物流,bridge water,bridge water,,fas,14708 +后勤和物流,bus,bus,,fas,14708 +后勤和物流,bus simple,bus simple,,fas,14708 +后勤和物流,car,car,,fas,14708 +后勤和物流,car tunnel,car tunnel,,fas,14708 +后勤和物流,cart flatbed,cart flatbed,,fas,14708 +后勤和物流,chart simple,chart simple,,fas,14708 +后勤和物流,clipboard check,clipboard check,,fas,14708 +后勤和物流,clipboard list,clipboard list,,fas,14708 +后勤和物流,clipboard question,clipboard question,,fas,14708 +后勤和物流,dolly,dolly,,fas,14708 +后勤和物流,ferry,ferry,,fas,14708 +后勤和物流,gas pump,gas pump,,fas,14708 +后勤和物流,gears,gears,,fas,14708 +后勤和物流,helicopter,helicopter,,fas,14708 +后勤和物流,helicopter symbol,helicopter symbol,,fas,14708 +后勤和物流,helmet safety,helmet safety,,fas,14708 +后勤和物流,jet fighter up,jet fighter up,,fas,14708 +后勤和物流,pallet,pallet,,fas,14708 +后勤和物流,plane circle check,plane circle check,,fas,14708 +后勤和物流,plane circle exclamation,plane circle exclamation,,fas,14708 +后勤和物流,plane circle xmark,plane circle xmark,,fas,14708 +后勤和物流,plane lock,plane lock,,fas,14708 +后勤和物流,road,road,,fas,14708 +后勤和物流,road barrier,road barrier,,fas,14708 +后勤和物流,road bridge,road bridge,,fas,14708 +后勤和物流,road circle check,road circle check,,fas,14708 +后勤和物流,road circle exclamation,road circle exclamation,,fas,14708 +后勤和物流,road circle xmark,road circle xmark,,fas,14708 +后勤和物流,road lock,road lock,,fas,14708 +后勤和物流,sailboat,sailboat,,fas,14708 +后勤和物流,square nfi,square nfi,,fas,14708 +后勤和物流,train,train,,fas,14708 +后勤和物流,train subway,train subway,,fas,14708 +后勤和物流,truck,truck,,fas,14708 +后勤和物流,truck arrow right,truck arrow right,,fas,14708 +后勤和物流,truck fast,truck fast,,fas,14708 +后勤和物流,truck field,truck field,,fas,14708 +后勤和物流,truck field un,truck field un,,fas,14708 +后勤和物流,truck front,truck front,,fas,14708 +后勤和物流,truck plane,truck plane,,fas,14708 +后勤和物流,warehouse,warehouse,,fas,14708 +后勤和物流,xmarks lines,xmarks lines,,fas,14708 +家庭,arrow up from water pump,arrow up from water pump,,fas,14708 +家庭,bath,bath,,fas,14708 +家庭,bed,bed,,fas,14708 +家庭,bell,bell,,far,14708 +家庭,bell,bell,,fas,14708 +家庭,blender,blender,,fas,14708 +家庭,box tissue,box tissue,,fas,14708 +家庭,chair,chair,,fas,14708 +家庭,computer,computer,,fas,14708 +家庭,couch,couch,,fas,14708 +家庭,door closed,door closed,,fas,14708 +家庭,door open,door open,,fas,14708 +家庭,dungeon,dungeon,,fas,14708 +家庭,fan,fan,,fas,14708 +家庭,faucet,faucet,,fas,14708 +家庭,faucet drip,faucet drip,,fas,14708 +家庭,fire burner,fire burner,,fas,14708 +家庭,house chimney user,house chimney user,,fas,14708 +家庭,house chimney window,house chimney window,,fas,14708 +家庭,house fire,house fire,,fas,14708 +家庭,house laptop,house laptop,,fas,14708 +家庭,house lock,house lock,,fas,14708 +家庭,house signal,house signal,,fas,14708 +家庭,house user,house user,,fas,14708 +家庭,jar,jar,,fas,14708 +家庭,jar wheat,jar wheat,,fas,14708 +家庭,jug detergent,jug detergent,,fas,14708 +家庭,kitchen set,kitchen set,,fas,14708 +家庭,lightbulb,lightbulb,,far,14708 +家庭,lightbulb,lightbulb,,fas,14708 +家庭,mattress pillow,mattress pillow,,fas,14708 +家庭,mug saucer,mug saucer,,fas,14708 +家庭,people roof,people roof,,fas,14708 +家庭,plug,plug,,fas,14708 +家庭,pump soap,pump soap,,fas,14708 +家庭,rug,rug,,fas,14708 +家庭,sheet plastic,sheet plastic,,fas,14708 +家庭,shower,shower,,fas,14708 +家庭,sink,sink,,fas,14708 +家庭,snowflake,snowflake,,far,14708 +家庭,snowflake,snowflake,,fas,14708 +家庭,soap,soap,,fas,14708 +家庭,spoon,spoon,,fas,14708 +家庭,stairs,stairs,,fas,14708 +家庭,temperature arrow down,temperature arrow down,,fas,14708 +家庭,temperature arrow up,temperature arrow up,,fas,14708 +家庭,toilet,toilet,,fas,14708 +家庭,toilet paper,toilet paper,,fas,14708 +家庭,toilet paper slash,toilet paper slash,,fas,14708 +家庭,tv,tv,,fas,14708 +家庭,utensils,utensils,,fas,14708 +假日,candy cane,candy cane,,fas,14708 +假日,carrot,carrot,,fas,14708 +假日,champagne glasses,champagne glasses,,fas,14708 +假日,cookie bite,cookie bite,,fas,14708 +假日,face grin hearts,face grin hearts,,far,14708 +假日,face grin hearts,face grin hearts,,fas,14708 +假日,face kiss wink heart,face kiss wink heart,,far,14708 +假日,face kiss wink heart,face kiss wink heart,,fas,14708 +假日,gift,gift,,fas,14708 +假日,gifts,gifts,,fas,14708 +假日,heart,heart,,far,14708 +假日,heart,heart,,fas,14708 +假日,holly berry,holly berry,,fas,14708 +假日,menorah,menorah,,fas,14708 +假日,mug hot,mug hot,,fas,14708 +假日,sleigh,sleigh,,fas,14708 +假日,snowman,snowman,,fas,14708 +建筑施工,arrow up from ground water,arrow up from ground water,,fas,14708 +建筑施工,bore hole,bore hole,,fas,14708 +建筑施工,brush,brush,,fas,14708 +建筑施工,bucket,bucket,,fas,14708 +建筑施工,compass drafting,compass drafting,,fas,14708 +建筑施工,dumpster,dumpster,,fas,14708 +建筑施工,dumpster fire,dumpster fire,,fas,14708 +建筑施工,hammer,hammer,,fas,14708 +建筑施工,helmet safety,helmet safety,,fas,14708 +建筑施工,mound,mound,,fas,14708 +建筑施工,paint roller,paint roller,,fas,14708 +建筑施工,pen ruler,pen ruler,,fas,14708 +建筑施工,pencil,pencil,,fas,14708 +建筑施工,person digging,person digging,,fas,14708 +建筑施工,ruler,ruler,,fas,14708 +建筑施工,ruler combined,ruler combined,,fas,14708 +建筑施工,ruler horizontal,ruler horizontal,,fas,14708 +建筑施工,ruler vertical,ruler vertical,,fas,14708 +建筑施工,screwdriver,screwdriver,,fas,14708 +建筑施工,screwdriver wrench,screwdriver wrench,,fas,14708 +建筑施工,sheet plastic,sheet plastic,,fas,14708 +建筑施工,tarp,tarp,,fas,14708 +建筑施工,tarp droplet,tarp droplet,,fas,14708 +建筑施工,toilet portable,toilet portable,,fas,14708 +建筑施工,toilets portable,toilets portable,,fas,14708 +建筑施工,toolbox,toolbox,,fas,14708 +建筑施工,trowel,trowel,,fas,14708 +建筑施工,trowel bricks,trowel bricks,,fas,14708 +建筑施工,truck pickup,truck pickup,,fas,14708 +建筑施工,wrench,wrench,,fas,14708 +建筑物,archway,archway,,fas,14708 +建筑物,arrow right to city,arrow right to city,,fas,14708 +建筑物,building,building,,far,14708 +建筑物,building,building,,fas,14708 +建筑物,building circle arrow right,building circle arrow right,,fas,14708 +建筑物,building circle check,building circle check,,fas,14708 +建筑物,building circle exclamation,building circle exclamation,,fas,14708 +建筑物,building circle xmark,building circle xmark,,fas,14708 +建筑物,building columns,building columns,,fas,14708 +建筑物,building flag,building flag,,fas,14708 +建筑物,building lock,building lock,,fas,14708 +建筑物,building ngo,building ngo,,fas,14708 +建筑物,building shield,building shield,,fas,14708 +建筑物,building un,building un,,fas,14708 +建筑物,building user,building user,,fas,14708 +建筑物,building wheat,building wheat,,fas,14708 +建筑物,campground,campground,,fas,14708 +建筑物,church,church,,fas,14708 +建筑物,city,city,,fas,14708 +建筑物,dungeon,dungeon,,fas,14708 +建筑物,gopuram,gopuram,,fas,14708 +建筑物,hospital,hospital,,far,14708 +建筑物,hospital,hospital,,fas,14708 +建筑物,hospital user,hospital user,,fas,14708 +建筑物,hotel,hotel,,fas,14708 +建筑物,house,house,,fas,14708 +建筑物,house chimney,house chimney,,fas,14708 +建筑物,house chimney crack,house chimney crack,,fas,14708 +建筑物,house chimney medical,house chimney medical,,fas,14708 +建筑物,house chimney window,house chimney window,,fas,14708 +建筑物,house circle check,house circle check,,fas,14708 +建筑物,house circle exclamation,house circle exclamation,,fas,14708 +建筑物,house circle xmark,house circle xmark,,fas,14708 +建筑物,house crack,house crack,,fas,14708 +建筑物,house fire,house fire,,fas,14708 +建筑物,house flag,house flag,,fas,14708 +建筑物,house lock,house lock,,fas,14708 +建筑物,house medical,house medical,,fas,14708 +建筑物,house medical circle check,house medical circle check,,fas,14708 +建筑物,house medical circle exclamation,house medical circle exclamation,,fas,14708 +建筑物,house medical circle xmark,house medical circle xmark,,fas,14708 +建筑物,house medical flag,house medical flag,,fas,14708 +建筑物,igloo,igloo,,fas,14708 +建筑物,industry,industry,,fas,14708 +建筑物,kaaba,kaaba,,fas,14708 +建筑物,landmark,landmark,,fas,14708 +建筑物,landmark dome,landmark dome,,fas,14708 +建筑物,landmark flag,landmark flag,,fas,14708 +建筑物,monument,monument,,fas,14708 +建筑物,mosque,mosque,,fas,14708 +建筑物,mountain city,mountain city,,fas,14708 +建筑物,oil well,oil well,,fas,14708 +建筑物,place of worship,place of worship,,fas,14708 +建筑物,school,school,,fas,14708 +建筑物,school circle check,school circle check,,fas,14708 +建筑物,school circle exclamation,school circle exclamation,,fas,14708 +建筑物,school circle xmark,school circle xmark,,fas,14708 +建筑物,school flag,school flag,,fas,14708 +建筑物,school lock,school lock,,fas,14708 +建筑物,shop,shop,,fas,14708 +建筑物,shop lock,shop lock,,fas,14708 +建筑物,store,store,,fas,14708 +建筑物,synagogue,synagogue,,fas,14708 +建筑物,tent,tent,,fas,14708 +建筑物,tent arrow down to line,tent arrow down to line,,fas,14708 +建筑物,tent arrow left right,tent arrow left right,,fas,14708 +建筑物,tent arrow turn left,tent arrow turn left,,fas,14708 +建筑物,tent arrows down,tent arrows down,,fas,14708 +建筑物,tents,tents,,fas,14708 +建筑物,toilet portable,toilet portable,,fas,14708 +建筑物,toilets portable,toilets portable,,fas,14708 +建筑物,torii gate,torii gate,,fas,14708 +建筑物,tower observation,tower observation,,fas,14708 +建筑物,tree city,tree city,,fas,14708 +建筑物,vihara,vihara,,fas,14708 +建筑物,warehouse,warehouse,,fas,14708 +箭头,angle down,angle down,,fas,14708 +箭头,angle left,angle left,,fas,14708 +箭头,angle right,angle right,,fas,14708 +箭头,angle up,angle up,,fas,14708 +箭头,angles down,angles down,,fas,14708 +箭头,angles left,angles left,,fas,14708 +箭头,angles right,angles right,,fas,14708 +箭头,angles up,angles up,,fas,14708 +箭头,arrow down,arrow down,,fas,14708 +箭头,arrow down 1 9,arrow down 1 9,,fas,14708 +箭头,arrow down 9 1,arrow down 9 1,,fas,14708 +箭头,arrow down a z,arrow down a z,,fas,14708 +箭头,arrow down long,arrow down long,,fas,14708 +箭头,arrow down short wide,arrow down short wide,,fas,14708 +箭头,arrow down up across line,arrow down up across line,,fas,14708 +箭头,arrow down up lock,arrow down up lock,,fas,14708 +箭头,arrow down wide short,arrow down wide short,,fas,14708 +箭头,arrow down z a,arrow down z a,,fas,14708 +箭头,arrow left,arrow left,,fas,14708 +箭头,arrow left long,arrow left long,,fas,14708 +箭头,arrow pointer,arrow pointer,,fas,14708 +箭头,arrow right,arrow right,,fas,14708 +箭头,arrow right arrow left,arrow right arrow left,,fas,14708 +箭头,arrow right from bracket,arrow right from bracket,,fas,14708 +箭头,arrow right long,arrow right long,,fas,14708 +箭头,arrow right to bracket,arrow right to bracket,,fas,14708 +箭头,arrow rotate left,arrow rotate left,,fas,14708 +箭头,arrow rotate right,arrow rotate right,,fas,14708 +箭头,arrow trend down,arrow trend down,,fas,14708 +箭头,arrow trend up,arrow trend up,,fas,14708 +箭头,arrow turn down,arrow turn down,,fas,14708 +箭头,arrow turn up,arrow turn up,,fas,14708 +箭头,arrow up,arrow up,,fas,14708 +箭头,arrow up 1 9,arrow up 1 9,,fas,14708 +箭头,arrow up 9 1,arrow up 9 1,,fas,14708 +箭头,arrow up a z,arrow up a z,,fas,14708 +箭头,arrow up from bracket,arrow up from bracket,,fas,14708 +箭头,arrow up long,arrow up long,,fas,14708 +箭头,arrow up right dots,arrow up right dots,,fas,14708 +箭头,arrow up right from square,arrow up right from square,,fas,14708 +箭头,arrow up short wide,arrow up short wide,,fas,14708 +箭头,arrow up wide short,arrow up wide short,,fas,14708 +箭头,arrow up z a,arrow up z a,,fas,14708 +箭头,arrows down to line,arrows down to line,,fas,14708 +箭头,arrows left right,arrows left right,,fas,14708 +箭头,arrows left right to line,arrows left right to line,,fas,14708 +箭头,arrows rotate,arrows rotate,,fas,14708 +箭头,arrows spin,arrows spin,,fas,14708 +箭头,arrows split up and left,arrows split up and left,,fas,14708 +箭头,arrows to circle,arrows to circle,,fas,14708 +箭头,arrows to dot,arrows to dot,,fas,14708 +箭头,arrows to eye,arrows to eye,,fas,14708 +箭头,arrows turn right,arrows turn right,,fas,14708 +箭头,arrows turn to dots,arrows turn to dots,,fas,14708 +箭头,arrows up down,arrows up down,,fas,14708 +箭头,arrows up down left right,arrows up down left right,,fas,14708 +箭头,arrows up to line,arrows up to line,,fas,14708 +箭头,caret down,caret down,,fas,14708 +箭头,caret left,caret left,,fas,14708 +箭头,caret right,caret right,,fas,14708 +箭头,caret up,caret up,,fas,14708 +箭头,chevron down,chevron down,,fas,14708 +箭头,chevron left,chevron left,,fas,14708 +箭头,chevron right,chevron right,,fas,14708 +箭头,chevron up,chevron up,,fas,14708 +箭头,circle arrow down,circle arrow down,,fas,14708 +箭头,circle arrow left,circle arrow left,,fas,14708 +箭头,circle arrow right,circle arrow right,,fas,14708 +箭头,circle arrow up,circle arrow up,,fas,14708 +箭头,circle chevron down,circle chevron down,,fas,14708 +箭头,circle chevron left,circle chevron left,,fas,14708 +箭头,circle chevron right,circle chevron right,,fas,14708 +箭头,circle chevron up,circle chevron up,,fas,14708 +箭头,circle down,circle down,,far,14708 +箭头,circle down,circle down,,fas,14708 +箭头,circle left,circle left,,far,14708 +箭头,circle left,circle left,,fas,14708 +箭头,circle right,circle right,,far,14708 +箭头,circle right,circle right,,fas,14708 +箭头,circle up,circle up,,far,14708 +箭头,circle up,circle up,,fas,14708 +箭头,clock rotate left,clock rotate left,,fas,14708 +箭头,cloud arrow down,cloud arrow down,,fas,14708 +箭头,cloud arrow up,cloud arrow up,,fas,14708 +箭头,down left and up right to center,down left and up right to center,,fas,14708 +箭头,down long,down long,,fas,14708 +箭头,download,download,,fas,14708 +箭头,left long,left long,,fas,14708 +箭头,left right,left right,,fas,14708 +箭头,location arrow,location arrow,,fas,14708 +箭头,maximize,maximize,,fas,14708 +箭头,recycle,recycle,,fas,14708 +箭头,repeat,repeat,,fas,14708 +箭头,reply,reply,,fas,14708 +箭头,reply all,reply all,,fas,14708 +箭头,retweet,retweet,,fas,14708 +箭头,right from bracket,right from bracket,,fas,14708 +箭头,right left,right left,,fas,14708 +箭头,right long,right long,,fas,14708 +箭头,right to bracket,right to bracket,,fas,14708 +箭头,rotate,rotate,,fas,14708 +箭头,rotate left,rotate left,,fas,14708 +箭头,rotate right,rotate right,,fas,14708 +箭头,share,share,,fas,14708 +箭头,share from square,share from square,,far,14708 +箭头,share from square,share from square,,fas,14708 +箭头,shuffle,shuffle,,fas,14708 +箭头,sort,sort,,fas,14708 +箭头,sort down,sort down,,fas,14708 +箭头,sort up,sort up,,fas,14708 +箭头,square arrow up right,square arrow up right,,fas,14708 +箭头,square caret down,square caret down,,far,14708 +箭头,square caret down,square caret down,,fas,14708 +箭头,square caret left,square caret left,,far,14708 +箭头,square caret left,square caret left,,fas,14708 +箭头,square caret right,square caret right,,far,14708 +箭头,square caret right,square caret right,,fas,14708 +箭头,square caret up,square caret up,,far,14708 +箭头,square caret up,square caret up,,fas,14708 +箭头,square up right,square up right,,fas,14708 +箭头,turn down,turn down,,fas,14708 +箭头,turn up,turn up,,fas,14708 +箭头,up down,up down,,fas,14708 +箭头,up down left right,up down left right,,fas,14708 +箭头,up long,up long,,fas,14708 +箭头,up right and down left from center,up right and down left from center,,fas,14708 +箭头,up right from square,up right from square,,fas,14708 +箭头,upload,upload,,fas,14708 +交通运输,accessible icon,accessible icon,,fab,14708 +交通运输,baby carriage,baby carriage,,fas,14708 +交通运输,bicycle,bicycle,,fas,14708 +交通运输,bus,bus,,fas,14708 +交通运输,bus simple,bus simple,,fas,14708 +交通运输,cable car,cable car,,fas,14708 +交通运输,car,car,,fas,14708 +交通运输,car burst,car burst,,fas,14708 +交通运输,car rear,car rear,,fas,14708 +交通运输,car side,car side,,fas,14708 +交通运输,car tunnel,car tunnel,,fas,14708 +交通运输,cart shopping,cart shopping,,fas,14708 +交通运输,ferry,ferry,,fas,14708 +交通运输,helicopter,helicopter,,fas,14708 +交通运输,horse,horse,,fas,14708 +交通运输,jet fighter,jet fighter,,fas,14708 +交通运输,jet fighter up,jet fighter up,,fas,14708 +交通运输,motorcycle,motorcycle,,fas,14708 +交通运输,mound,mound,,fas,14708 +交通运输,paper plane,paper plane,,far,14708 +交通运输,paper plane,paper plane,,fas,14708 +交通运输,plane,plane,,fas,14708 +交通运输,plane slash,plane slash,,fas,14708 +交通运输,plane up,plane up,,fas,14708 +交通运输,road,road,,fas,14708 +交通运输,road barrier,road barrier,,fas,14708 +交通运输,road spikes,road spikes,,fas,14708 +交通运输,rocket,rocket,,fas,14708 +交通运输,sailboat,sailboat,,fas,14708 +交通运输,ship,ship,,fas,14708 +交通运输,shuttle space,shuttle space,,fas,14708 +交通运输,sleigh,sleigh,,fas,14708 +交通运输,snowplow,snowplow,,fas,14708 +交通运输,taxi,taxi,,fas,14708 +交通运输,tractor,tractor,,fas,14708 +交通运输,train,train,,fas,14708 +交通运输,train subway,train subway,,fas,14708 +交通运输,train tram,train tram,,fas,14708 +交通运输,truck,truck,,fas,14708 +交通运输,truck arrow right,truck arrow right,,fas,14708 +交通运输,truck droplet,truck droplet,,fas,14708 +交通运输,truck field,truck field,,fas,14708 +交通运输,truck field un,truck field un,,fas,14708 +交通运输,truck front,truck front,,fas,14708 +交通运输,truck medical,truck medical,,fas,14708 +交通运输,truck monster,truck monster,,fas,14708 +交通运输,truck pickup,truck pickup,,fas,14708 +交通运输,truck plane,truck plane,,fas,14708 +交通运输,van shuttle,van shuttle,,fas,14708 +交通运输,wheelchair,wheelchair,,fas,14708 +交通运输,wheelchair move,wheelchair move,,fas,14708 +教育,apple whole,apple whole,,fas,14708 +教育,atom,atom,,fas,14708 +教育,award,award,,fas,14708 +教育,bell,bell,,far,14708 +教育,bell,bell,,fas,14708 +教育,bell slash,bell slash,,far,14708 +教育,bell slash,bell slash,,fas,14708 +教育,book open,book open,,fas,14708 +教育,book open reader,book open reader,,fas,14708 +教育,chalkboard,chalkboard,,fas,14708 +教育,chalkboard user,chalkboard user,,fas,14708 +教育,graduation cap,graduation cap,,fas,14708 +教育,laptop code,laptop code,,fas,14708 +教育,laptop file,laptop file,,fas,14708 +教育,masks theater,masks theater,,fas,14708 +教育,microscope,microscope,,fas,14708 +教育,music,music,,fas,14708 +教育,person chalkboard,person chalkboard,,fas,14708 +教育,school,school,,fas,14708 +教育,school circle check,school circle check,,fas,14708 +教育,school circle exclamation,school circle exclamation,,fas,14708 +教育,school circle xmark,school circle xmark,,fas,14708 +教育,school flag,school flag,,fas,14708 +教育,school lock,school lock,,fas,14708 +教育,shapes,shapes,,fas,14708 +教育,user graduate,user graduate,,fas,14708 +金钱,austral sign,austral sign,,fas,14708 +金钱,baht sign,baht sign,,fas,14708 +金钱,bangladeshi taka sign,bangladeshi taka sign,,fas,14708 +金钱,bitcoin,bitcoin,,fab,14708 +金钱,bitcoin sign,bitcoin sign,,fas,14708 +金钱,brazilian real sign,brazilian real sign,,fas,14708 +金钱,btc,btc,,fab,14708 +金钱,cash register,cash register,,fas,14708 +金钱,cedi sign,cedi sign,,fas,14708 +金钱,cent sign,cent sign,,fas,14708 +金钱,chart line,chart line,,fas,14708 +金钱,chart pie,chart pie,,fas,14708 +金钱,circle dollar to slot,circle dollar to slot,,fas,14708 +金钱,coins,coins,,fas,14708 +金钱,colon sign,colon sign,,fas,14708 +金钱,comment dollar,comment dollar,,fas,14708 +金钱,comments dollar,comments dollar,,fas,14708 +金钱,credit card,credit card,,far,14708 +金钱,credit card,credit card,,fas,14708 +金钱,cruzeiro sign,cruzeiro sign,,fas,14708 +金钱,dollar sign,dollar sign,$,fas,14708 +金钱,dong sign,dong sign,,fas,14708 +金钱,ethereum,ethereum,,fab,14708 +金钱,euro sign,euro sign,,fas,14708 +金钱,file invoice,file invoice,,fas,14708 +金钱,file invoice dollar,file invoice dollar,,fas,14708 +金钱,florin sign,florin sign,,fas,14708 +金钱,franc sign,franc sign,,fas,14708 +金钱,gg,gg,,fab,14708 +金钱,gg circle,gg circle,,fab,14708 +金钱,guarani sign,guarani sign,,fas,14708 +金钱,hand holding dollar,hand holding dollar,,fas,14708 +金钱,hryvnia sign,hryvnia sign,,fas,14708 +金钱,indian rupee sign,indian rupee sign,,fas,14708 +金钱,kip sign,kip sign,,fas,14708 +金钱,landmark,landmark,,fas,14708 +金钱,lari sign,lari sign,,fas,14708 +金钱,lira sign,lira sign,,fas,14708 +金钱,litecoin sign,litecoin sign,,fas,14708 +金钱,manat sign,manat sign,,fas,14708 +金钱,mill sign,mill sign,,fas,14708 +金钱,money bill,money bill,,fas,14708 +金钱,money bill 1,money bill 1,,far,14708 +金钱,money bill 1,money bill 1,,fas,14708 +金钱,money bill 1 wave,money bill 1 wave,,fas,14708 +金钱,money bill transfer,money bill transfer,,fas,14708 +金钱,money bill trend up,money bill trend up,,fas,14708 +金钱,money bill wave,money bill wave,,fas,14708 +金钱,money bill wheat,money bill wheat,,fas,14708 +金钱,money bills,money bills,,fas,14708 +金钱,money check,money check,,fas,14708 +金钱,money check dollar,money check dollar,,fas,14708 +金钱,naira sign,naira sign,,fas,14708 +金钱,percent,percent,%,fas,14708 +金钱,peseta sign,peseta sign,,fas,14708 +金钱,peso sign,peso sign,,fas,14708 +金钱,piggy bank,piggy bank,,fas,14708 +金钱,receipt,receipt,,fas,14708 +金钱,ruble sign,ruble sign,,fas,14708 +金钱,rupee sign,rupee sign,,fas,14708 +金钱,rupiah sign,rupiah sign,,fas,14708 +金钱,sack dollar,sack dollar,,fas,14708 +金钱,sack xmark,sack xmark,,fas,14708 +金钱,scale balanced,scale balanced,,fas,14708 +金钱,scale unbalanced,scale unbalanced,,fas,14708 +金钱,scale unbalanced flip,scale unbalanced flip,,fas,14708 +金钱,shekel sign,shekel sign,,fas,14708 +金钱,stamp,stamp,,fas,14708 +金钱,sterling sign,sterling sign,,fas,14708 +金钱,tenge sign,tenge sign,,fas,14708 +金钱,turkish lira sign,turkish lira sign,,fas,14708 +金钱,vault,vault,,fas,14708 +金钱,wallet,wallet,,fas,14708 +金钱,won sign,won sign,,fas,14708 +金钱,yen sign,yen sign,,fas,14708 +警示,bell,bell,,far,14708 +警示,bell,bell,,fas,14708 +警示,bell slash,bell slash,,far,14708 +警示,bell slash,bell slash,,fas,14708 +警示,circle exclamation,circle exclamation,,fas,14708 +警示,circle radiation,circle radiation,,fas,14708 +警示,exclamation,exclamation,!,fas,14708 +警示,question,question,?,fas,14708 +警示,radiation,radiation,,fas,14708 +警示,skull crossbones,skull crossbones,,fas,14708 +警示,triangle exclamation,triangle exclamation,,fas,14708 +科幻小说,atom,atom,,fas,14708 +科幻小说,book journal whills,book journal whills,,fas,14708 +科幻小说,explosion,explosion,,fas,14708 +科幻小说,galactic republic,galactic republic,,fab,14708 +科幻小说,galactic senate,galactic senate,,fab,14708 +科幻小说,hand spock,hand spock,,far,14708 +科幻小说,hand spock,hand spock,,fas,14708 +科幻小说,jedi,jedi,,fas,14708 +科幻小说,jedi order,jedi order,,fab,14708 +科幻小说,old republic,old republic,,fab,14708 +科幻小说,robot,robot,,fas,14708 +科幻小说,rocket,rocket,,fas,14708 +科幻小说,space awesome,space awesome,,fab,14708 +科幻小说,user astronaut,user astronaut,,fas,14708 +科学,atom,atom,,fas,14708 +科学,biohazard,biohazard,,fas,14708 +科学,brain,brain,,fas,14708 +科学,capsules,capsules,,fas,14708 +科学,circle radiation,circle radiation,,fas,14708 +科学,clipboard check,clipboard check,,fas,14708 +科学,disease,disease,,fas,14708 +科学,dna,dna,,fas,14708 +科学,eye dropper,eye dropper,,fas,14708 +科学,filter,filter,,fas,14708 +科学,fire,fire,,fas,14708 +科学,fire flame curved,fire flame curved,,fas,14708 +科学,fire flame simple,fire flame simple,,fas,14708 +科学,flask,flask,,fas,14708 +科学,flask vial,flask vial,,fas,14708 +科学,frog,frog,,fas,14708 +科学,magnet,magnet,,fas,14708 +科学,microscope,microscope,,fas,14708 +科学,mortar pestle,mortar pestle,,fas,14708 +科学,pills,pills,,fas,14708 +科学,prescription bottle,prescription bottle,,fas,14708 +科学,radiation,radiation,,fas,14708 +科学,seedling,seedling,,fas,14708 +科学,skull crossbones,skull crossbones,,fas,14708 +科学,square virus,square virus,,fas,14708 +科学,syringe,syringe,,fas,14708 +科学,tablets,tablets,,fas,14708 +科学,temperature high,temperature high,,fas,14708 +科学,temperature low,temperature low,,fas,14708 +科学,vial,vial,,fas,14708 +科学,vial circle check,vial circle check,,fas,14708 +科学,vial virus,vial virus,,fas,14708 +科学,vials,vials,,fas,14708 +连通性,bluetooth,bluetooth,,fab,14708 +连通性,circle nodes,circle nodes,,fas,14708 +连通性,cloud,cloud,,fas,14708 +连通性,cloud arrow down,cloud arrow down,,fas,14708 +连通性,cloud arrow up,cloud arrow up,,fas,14708 +连通性,ethernet,ethernet,,fas,14708 +连通性,globe,globe,,fas,14708 +连通性,house signal,house signal,,fas,14708 +连通性,rss,rss,,fas,14708 +连通性,satellite dish,satellite dish,,fas,14708 +连通性,signal,signal,,fas,14708 +连通性,tower broadcast,tower broadcast,,fas,14708 +连通性,tower cell,tower cell,,fas,14708 +连通性,wifi,wifi,,fas,14708 +露营,binoculars,binoculars,,fas,14708 +露营,bottle water,bottle water,,fas,14708 +露营,bucket,bucket,,fas,14708 +露营,campground,campground,,fas,14708 +露营,caravan,caravan,,fas,14708 +露营,compass,compass,,far,14708 +露营,compass,compass,,fas,14708 +露营,faucet,faucet,,fas,14708 +露营,faucet drip,faucet drip,,fas,14708 +露营,fire,fire,,fas,14708 +露营,fire burner,fire burner,,fas,14708 +露营,fire flame curved,fire flame curved,,fas,14708 +露营,frog,frog,,fas,14708 +露营,kit medical,kit medical,,fas,14708 +露营,map,map,,far,14708 +露营,map,map,,fas,14708 +露营,map location,map location,,fas,14708 +露营,map location dot,map location dot,,fas,14708 +露营,mattress pillow,mattress pillow,,fas,14708 +露营,mosquito,mosquito,,fas,14708 +露营,mosquito net,mosquito net,,fas,14708 +露营,mountain,mountain,,fas,14708 +露营,mountain sun,mountain sun,,fas,14708 +露营,people roof,people roof,,fas,14708 +露营,person hiking,person hiking,,fas,14708 +露营,person shelter,person shelter,,fas,14708 +露营,route,route,,fas,14708 +露营,signs post,signs post,,fas,14708 +露营,tarp,tarp,,fas,14708 +露营,tarp droplet,tarp droplet,,fas,14708 +露营,tent,tent,,fas,14708 +露营,tent arrow down to line,tent arrow down to line,,fas,14708 +露营,tent arrow left right,tent arrow left right,,fas,14708 +露营,tent arrow turn left,tent arrow turn left,,fas,14708 +露营,tent arrows down,tent arrows down,,fas,14708 +露营,tents,tents,,fas,14708 +露营,toilet paper,toilet paper,,fas,14708 +露营,trailer,trailer,,fas,14708 +露营,tree,tree,,fas,14708 +旅行和酒店,archway,archway,,fas,14708 +旅行和酒店,baby carriage,baby carriage,,fas,14708 +旅行和酒店,ban smoking,ban smoking,,fas,14708 +旅行和酒店,bath,bath,,fas,14708 +旅行和酒店,bed,bed,,fas,14708 +旅行和酒店,bell concierge,bell concierge,,fas,14708 +旅行和酒店,book atlas,book atlas,,fas,14708 +旅行和酒店,briefcase,briefcase,,fas,14708 +旅行和酒店,bus,bus,,fas,14708 +旅行和酒店,bus simple,bus simple,,fas,14708 +旅行和酒店,cable car,cable car,,fas,14708 +旅行和酒店,car,car,,fas,14708 +旅行和酒店,caravan,caravan,,fas,14708 +旅行和酒店,cart flatbed suitcase,cart flatbed suitcase,,fas,14708 +旅行和酒店,dice,dice,,fas,14708 +旅行和酒店,dice five,dice five,,fas,14708 +旅行和酒店,door closed,door closed,,fas,14708 +旅行和酒店,door open,door open,,fas,14708 +旅行和酒店,dumbbell,dumbbell,,fas,14708 +旅行和酒店,earth africa,earth africa,,fas,14708 +旅行和酒店,earth americas,earth americas,,fas,14708 +旅行和酒店,earth asia,earth asia,,fas,14708 +旅行和酒店,earth europe,earth europe,,fas,14708 +旅行和酒店,earth oceania,earth oceania,,fas,14708 +旅行和酒店,elevator,elevator,,fas,14708 +旅行和酒店,hot tub person,hot tub person,,fas,14708 +旅行和酒店,hotel,hotel,,fas,14708 +旅行和酒店,infinity,infinity,,fas,14708 +旅行和酒店,key,key,,fas,14708 +旅行和酒店,kitchen set,kitchen set,,fas,14708 +旅行和酒店,map,map,,far,14708 +旅行和酒店,map,map,,fas,14708 +旅行和酒店,map location,map location,,fas,14708 +旅行和酒店,map location dot,map location dot,,fas,14708 +旅行和酒店,martini glass,martini glass,,fas,14708 +旅行和酒店,martini glass citrus,martini glass citrus,,fas,14708 +旅行和酒店,martini glass empty,martini glass empty,,fas,14708 +旅行和酒店,monument,monument,,fas,14708 +旅行和酒店,mountain city,mountain city,,fas,14708 +旅行和酒店,mug saucer,mug saucer,,fas,14708 +旅行和酒店,passport,passport,,fas,14708 +旅行和酒店,person swimming,person swimming,,fas,14708 +旅行和酒店,person walking luggage,person walking luggage,,fas,14708 +旅行和酒店,plane,plane,,fas,14708 +旅行和酒店,plane arrival,plane arrival,,fas,14708 +旅行和酒店,plane circle check,plane circle check,,fas,14708 +旅行和酒店,plane circle exclamation,plane circle exclamation,,fas,14708 +旅行和酒店,plane circle xmark,plane circle xmark,,fas,14708 +旅行和酒店,plane departure,plane departure,,fas,14708 +旅行和酒店,plane lock,plane lock,,fas,14708 +旅行和酒店,plane slash,plane slash,,fas,14708 +旅行和酒店,plane up,plane up,,fas,14708 +旅行和酒店,shower,shower,,fas,14708 +旅行和酒店,smoking,smoking,,fas,14708 +旅行和酒店,snowflake,snowflake,,far,14708 +旅行和酒店,snowflake,snowflake,,fas,14708 +旅行和酒店,spa,spa,,fas,14708 +旅行和酒店,stairs,stairs,,fas,14708 +旅行和酒店,suitcase,suitcase,,fas,14708 +旅行和酒店,suitcase rolling,suitcase rolling,,fas,14708 +旅行和酒店,taxi,taxi,,fas,14708 +旅行和酒店,toilet,toilet,,fas,14708 +旅行和酒店,toilet paper,toilet paper,,fas,14708 +旅行和酒店,train tram,train tram,,fas,14708 +旅行和酒店,tree city,tree city,,fas,14708 +旅行和酒店,tv,tv,,fas,14708 +旅行和酒店,umbrella beach,umbrella beach,,fas,14708 +旅行和酒店,utensils,utensils,,fas,14708 +旅行和酒店,van shuttle,van shuttle,,fas,14708 +旅行和酒店,water ladder,water ladder,,fas,14708 +旅行和酒店,wheelchair,wheelchair,,fas,14708 +旅行和酒店,wheelchair move,wheelchair move,,fas,14708 +旅行和酒店,wifi,wifi,,fas,14708 +旅行和酒店,wine glass,wine glass,,fas,14708 +旅行和酒店,wine glass empty,wine glass empty,,fas,14708 +媒体播放,arrow rotate left,arrow rotate left,,fas,14708 +媒体播放,arrow rotate right,arrow rotate right,,fas,14708 +媒体播放,arrows rotate,arrows rotate,,fas,14708 +媒体播放,backward,backward,,fas,14708 +媒体播放,backward fast,backward fast,,fas,14708 +媒体播放,backward step,backward step,,fas,14708 +媒体播放,circle pause,circle pause,,far,14708 +媒体播放,circle pause,circle pause,,fas,14708 +媒体播放,circle play,circle play,,far,14708 +媒体播放,circle play,circle play,,fas,14708 +媒体播放,circle stop,circle stop,,far,14708 +媒体播放,circle stop,circle stop,,fas,14708 +媒体播放,compress,compress,,fas,14708 +媒体播放,down left and up right to center,down left and up right to center,,fas,14708 +媒体播放,eject,eject,,fas,14708 +媒体播放,expand,expand,,fas,14708 +媒体播放,forward,forward,,fas,14708 +媒体播放,forward fast,forward fast,,fas,14708 +媒体播放,forward step,forward step,,fas,14708 +媒体播放,hand,hand,,far,14708 +媒体播放,hand,hand,,fas,14708 +媒体播放,maximize,maximize,,fas,14708 +媒体播放,minimize,minimize,,fas,14708 +媒体播放,music,music,,fas,14708 +媒体播放,pause,pause,,fas,14708 +媒体播放,phone volume,phone volume,,fas,14708 +媒体播放,play,play,,fas,14708 +媒体播放,plus minus,plus minus,,fas,14708 +媒体播放,repeat,repeat,,fas,14708 +媒体播放,rotate,rotate,,fas,14708 +媒体播放,rotate left,rotate left,,fas,14708 +媒体播放,rotate right,rotate right,,fas,14708 +媒体播放,rss,rss,,fas,14708 +媒体播放,shuffle,shuffle,,fas,14708 +媒体播放,sliders,sliders,,fas,14708 +媒体播放,stop,stop,,fas,14708 +媒体播放,up right and down left from center,up right and down left from center,,fas,14708 +媒体播放,volume high,volume high,,fas,14708 +媒体播放,volume low,volume low,,fas,14708 +媒体播放,volume off,volume off,,fas,14708 +媒体播放,volume xmark,volume xmark,,fas,14708 +能源,arrow up from ground water,arrow up from ground water,,fas,14708 +能源,atom,atom,,fas,14708 +能源,battery empty,battery empty,,fas,14708 +能源,battery full,battery full,,fas,14708 +能源,battery half,battery half,,fas,14708 +能源,battery quarter,battery quarter,,fas,14708 +能源,battery three quarters,battery three quarters,,fas,14708 +能源,bolt,bolt,,fas,14708 +能源,car battery,car battery,,fas,14708 +能源,charging station,charging station,,fas,14708 +能源,circle radiation,circle radiation,,fas,14708 +能源,explosion,explosion,,fas,14708 +能源,fan,fan,,fas,14708 +能源,fire,fire,,fas,14708 +能源,fire flame curved,fire flame curved,,fas,14708 +能源,fire flame simple,fire flame simple,,fas,14708 +能源,gas pump,gas pump,,fas,14708 +能源,industry,industry,,fas,14708 +能源,leaf,leaf,,fas,14708 +能源,lightbulb,lightbulb,,far,14708 +能源,lightbulb,lightbulb,,fas,14708 +能源,oil well,oil well,,fas,14708 +能源,plug,plug,,fas,14708 +能源,plug circle bolt,plug circle bolt,,fas,14708 +能源,plug circle check,plug circle check,,fas,14708 +能源,plug circle exclamation,plug circle exclamation,,fas,14708 +能源,plug circle minus,plug circle minus,,fas,14708 +能源,plug circle plus,plug circle plus,,fas,14708 +能源,plug circle xmark,plug circle xmark,,fas,14708 +能源,poop,poop,,fas,14708 +能源,power off,power off,,fas,14708 +能源,radiation,radiation,,fas,14708 +能源,seedling,seedling,,fas,14708 +能源,solar panel,solar panel,,fas,14708 +能源,sun,sun,,far,14708 +能源,sun,sun,,fas,14708 +能源,tower broadcast,tower broadcast,,fas,14708 +能源,water,water,,fas,14708 +能源,wind,wind,,fas,14708 +汽车,bus,bus,,fas,14708 +汽车,bus simple,bus simple,,fas,14708 +汽车,car,car,,fas,14708 +汽车,car battery,car battery,,fas,14708 +汽车,car burst,car burst,,fas,14708 +汽车,car on,car on,,fas,14708 +汽车,car rear,car rear,,fas,14708 +汽车,car side,car side,,fas,14708 +汽车,car tunnel,car tunnel,,fas,14708 +汽车,caravan,caravan,,fas,14708 +汽车,charging station,charging station,,fas,14708 +汽车,gas pump,gas pump,,fas,14708 +汽车,gauge,gauge,,fas,14708 +汽车,gauge high,gauge high,,fas,14708 +汽车,gauge simple,gauge simple,,fas,14708 +汽车,gauge simple high,gauge simple high,,fas,14708 +汽车,motorcycle,motorcycle,,fas,14708 +汽车,oil can,oil can,,fas,14708 +汽车,spray can sparkles,spray can sparkles,,fas,14708 +汽车,taxi,taxi,,fas,14708 +汽车,trailer,trailer,,fas,14708 +汽车,truck,truck,,fas,14708 +汽车,truck field,truck field,,fas,14708 +汽车,truck field un,truck field un,,fas,14708 +汽车,truck medical,truck medical,,fas,14708 +汽车,truck monster,truck monster,,fas,14708 +汽车,truck pickup,truck pickup,,fas,14708 +汽车,van shuttle,van shuttle,,fas,14708 +切换,bullseye,bullseye,,fas,14708 +切换,circle,circle,,far,14708 +切换,circle,circle,,fas,14708 +切换,circle check,circle check,,far,14708 +切换,circle check,circle check,,fas,14708 +切换,circle dot,circle dot,,far,14708 +切换,circle dot,circle dot,,fas,14708 +切换,location crosshairs,location crosshairs,,fas,14708 +切换,microphone,microphone,,fas,14708 +切换,microphone slash,microphone slash,,fas,14708 +切换,plane up,plane up,,fas,14708 +切换,signal,signal,,fas,14708 +切换,star,star,,far,14708 +切换,star,star,,fas,14708 +切换,star half,star half,,far,14708 +切换,star half,star half,,fas,14708 +切换,star half stroke,star half stroke,,far,14708 +切换,star half stroke,star half stroke,,fas,14708 +切换,toggle off,toggle off,,fas,14708 +切换,toggle on,toggle on,,fas,14708 +切换,wifi,wifi,,fas,14708 +人文,anchor,anchor,,fas,14708 +人文,anchor circle check,anchor circle check,,fas,14708 +人文,anchor circle exclamation,anchor circle exclamation,,fas,14708 +人文,anchor circle xmark,anchor circle xmark,,fas,14708 +人文,anchor lock,anchor lock,,fas,14708 +人文,arrow down up across line,arrow down up across line,,fas,14708 +人文,arrow down up lock,arrow down up lock,,fas,14708 +人文,arrow right to city,arrow right to city,,fas,14708 +人文,arrow up from ground water,arrow up from ground water,,fas,14708 +人文,arrow up from water pump,arrow up from water pump,,fas,14708 +人文,arrow up right dots,arrow up right dots,,fas,14708 +人文,arrow up right from square,arrow up right from square,,fas,14708 +人文,arrows down to line,arrows down to line,,fas,14708 +人文,arrows down to people,arrows down to people,,fas,14708 +人文,arrows left right to line,arrows left right to line,,fas,14708 +人文,arrows spin,arrows spin,,fas,14708 +人文,arrows split up and left,arrows split up and left,,fas,14708 +人文,arrows to circle,arrows to circle,,fas,14708 +人文,arrows to dot,arrows to dot,,fas,14708 +人文,arrows to eye,arrows to eye,,fas,14708 +人文,arrows turn right,arrows turn right,,fas,14708 +人文,arrows turn to dots,arrows turn to dots,,fas,14708 +人文,arrows up to line,arrows up to line,,fas,14708 +人文,baby,baby,,fas,14708 +人文,bacterium,bacterium,,fas,14708 +人文,ban,ban,,fas,14708 +人文,bed,bed,,fas,14708 +人文,biohazard,biohazard,,fas,14708 +人文,book bookmark,book bookmark,,fas,14708 +人文,bore hole,bore hole,,fas,14708 +人文,bottle droplet,bottle droplet,,fas,14708 +人文,bottle water,bottle water,,fas,14708 +人文,bowl food,bowl food,,fas,14708 +人文,bowl rice,bowl rice,,fas,14708 +人文,boxes packing,boxes packing,,fas,14708 +人文,bridge,bridge,,fas,14708 +人文,bridge circle check,bridge circle check,,fas,14708 +人文,bridge circle exclamation,bridge circle exclamation,,fas,14708 +人文,bridge circle xmark,bridge circle xmark,,fas,14708 +人文,bridge lock,bridge lock,,fas,14708 +人文,bridge water,bridge water,,fas,14708 +人文,bucket,bucket,,fas,14708 +人文,bugs,bugs,,fas,14708 +人文,building,building,,far,14708 +人文,building,building,,fas,14708 +人文,building circle arrow right,building circle arrow right,,fas,14708 +人文,building circle check,building circle check,,fas,14708 +人文,building circle exclamation,building circle exclamation,,fas,14708 +人文,building circle xmark,building circle xmark,,fas,14708 +人文,building columns,building columns,,fas,14708 +人文,building flag,building flag,,fas,14708 +人文,building lock,building lock,,fas,14708 +人文,building ngo,building ngo,,fas,14708 +人文,building shield,building shield,,fas,14708 +人文,building un,building un,,fas,14708 +人文,building user,building user,,fas,14708 +人文,building wheat,building wheat,,fas,14708 +人文,burst,burst,,fas,14708 +人文,bus,bus,,fas,14708 +人文,car,car,,fas,14708 +人文,car on,car on,,fas,14708 +人文,car tunnel,car tunnel,,fas,14708 +人文,child combatant,child combatant,,fas,14708 +人文,children,children,,fas,14708 +人文,church,church,,fas,14708 +人文,circle h,circle h,,fas,14708 +人文,circle nodes,circle nodes,,fas,14708 +人文,clipboard question,clipboard question,,fas,14708 +人文,clipboard user,clipboard user,,fas,14708 +人文,cloud bolt,cloud bolt,,fas,14708 +人文,cloud showers heavy,cloud showers heavy,,fas,14708 +人文,cloud showers water,cloud showers water,,fas,14708 +人文,computer,computer,,fas,14708 +人文,cow,cow,,fas,14708 +人文,cubes stacked,cubes stacked,,fas,14708 +人文,display,display,,fas,14708 +人文,droplet,droplet,,fas,14708 +人文,envelope,envelope,,far,14708 +人文,envelope,envelope,,fas,14708 +人文,envelope circle check,envelope circle check,,fas,14708 +人文,explosion,explosion,,fas,14708 +人文,faucet drip,faucet drip,,fas,14708 +人文,fax,fax,,fas,14708 +人文,ferry,ferry,,fas,14708 +人文,file,file,,far,14708 +人文,file,file,,fas,14708 +人文,file circle check,file circle check,,fas,14708 +人文,file circle exclamation,file circle exclamation,,fas,14708 +人文,file circle minus,file circle minus,,fas,14708 +人文,file circle plus,file circle plus,,fas,14708 +人文,file circle question,file circle question,,fas,14708 +人文,file circle xmark,file circle xmark,,fas,14708 +人文,file csv,file csv,,fas,14708 +人文,file pdf,file pdf,,far,14708 +人文,file pdf,file pdf,,fas,14708 +人文,file pen,file pen,,fas,14708 +人文,file shield,file shield,,fas,14708 +人文,fire burner,fire burner,,fas,14708 +人文,fire flame simple,fire flame simple,,fas,14708 +人文,fish fins,fish fins,,fas,14708 +人文,flag,flag,,far,14708 +人文,flag,flag,,fas,14708 +人文,flask vial,flask vial,,fas,14708 +人文,gas pump,gas pump,,fas,14708 +人文,glass water,glass water,,fas,14708 +人文,glass water droplet,glass water droplet,,fas,14708 +人文,gopuram,gopuram,,fas,14708 +人文,group arrows rotate,group arrows rotate,,fas,14708 +人文,hammer,hammer,,fas,14708 +人文,hand holding hand,hand holding hand,,fas,14708 +人文,handcuffs,handcuffs,,fas,14708 +人文,hands bound,hands bound,,fas,14708 +人文,hands bubbles,hands bubbles,,fas,14708 +人文,hands holding child,hands holding child,,fas,14708 +人文,hands holding circle,hands holding circle,,fas,14708 +人文,handshake simple,handshake simple,,fas,14708 +人文,headset,headset,,fas,14708 +人文,heart circle bolt,heart circle bolt,,fas,14708 +人文,heart circle check,heart circle check,,fas,14708 +人文,heart circle exclamation,heart circle exclamation,,fas,14708 +人文,heart circle minus,heart circle minus,,fas,14708 +人文,heart circle plus,heart circle plus,,fas,14708 +人文,heart circle xmark,heart circle xmark,,fas,14708 +人文,helicopter,helicopter,,fas,14708 +人文,helicopter symbol,helicopter symbol,,fas,14708 +人文,helmet un,helmet un,,fas,14708 +人文,hill avalanche,hill avalanche,,fas,14708 +人文,hill rockslide,hill rockslide,,fas,14708 +人文,hospital,hospital,,far,14708 +人文,hospital,hospital,,fas,14708 +人文,hotel,hotel,,fas,14708 +人文,house chimney,house chimney,,fas,14708 +人文,house chimney crack,house chimney crack,,fas,14708 +人文,house circle check,house circle check,,fas,14708 +人文,house circle exclamation,house circle exclamation,,fas,14708 +人文,house circle xmark,house circle xmark,,fas,14708 +人文,house fire,house fire,,fas,14708 +人文,house flag,house flag,,fas,14708 +人文,house flood water,house flood water,,fas,14708 +人文,house flood water circle arrow right,house flood water circle arrow right,,fas,14708 +人文,house lock,house lock,,fas,14708 +人文,house medical,house medical,,fas,14708 +人文,house medical circle check,house medical circle check,,fas,14708 +人文,house medical circle exclamation,house medical circle exclamation,,fas,14708 +人文,house medical circle xmark,house medical circle xmark,,fas,14708 +人文,house medical flag,house medical flag,,fas,14708 +人文,house signal,house signal,,fas,14708 +人文,house tsunami,house tsunami,,fas,14708 +人文,hurricane,hurricane,,fas,14708 +人文,id card,id card,,far,14708 +人文,id card,id card,,fas,14708 +人文,jar,jar,,fas,14708 +人文,jar wheat,jar wheat,,fas,14708 +人文,jet fighter up,jet fighter up,,fas,14708 +人文,jug detergent,jug detergent,,fas,14708 +人文,kitchen set,kitchen set,,fas,14708 +人文,land mine on,land mine on,,fas,14708 +人文,landmark,landmark,,fas,14708 +人文,landmark dome,landmark dome,,fas,14708 +人文,landmark flag,landmark flag,,fas,14708 +人文,laptop,laptop,,fas,14708 +人文,laptop file,laptop file,,fas,14708 +人文,life ring,life ring,,far,14708 +人文,life ring,life ring,,fas,14708 +人文,lines leaning,lines leaning,,fas,14708 +人文,location pin lock,location pin lock,,fas,14708 +人文,locust,locust,,fas,14708 +人文,lungs,lungs,,fas,14708 +人文,magnifying glass arrow right,magnifying glass arrow right,,fas,14708 +人文,magnifying glass chart,magnifying glass chart,,fas,14708 +人文,mars and venus,mars and venus,,fas,14708 +人文,mars and venus burst,mars and venus burst,,fas,14708 +人文,mask face,mask face,,fas,14708 +人文,mask ventilator,mask ventilator,,fas,14708 +人文,mattress pillow,mattress pillow,,fas,14708 +人文,microscope,microscope,,fas,14708 +人文,mobile retro,mobile retro,,fas,14708 +人文,mobile screen,mobile screen,,fas,14708 +人文,money bill transfer,money bill transfer,,fas,14708 +人文,money bill trend up,money bill trend up,,fas,14708 +人文,money bill wheat,money bill wheat,,fas,14708 +人文,money bills,money bills,,fas,14708 +人文,mosque,mosque,,fas,14708 +人文,mosquito,mosquito,,fas,14708 +人文,mosquito net,mosquito net,,fas,14708 +人文,mound,mound,,fas,14708 +人文,mountain city,mountain city,,fas,14708 +人文,mountain sun,mountain sun,,fas,14708 +人文,oil well,oil well,,fas,14708 +人文,parachute box,parachute box,,fas,14708 +人文,people arrows,people arrows,,fas,14708 +人文,people group,people group,,fas,14708 +人文,people line,people line,,fas,14708 +人文,people pulling,people pulling,,fas,14708 +人文,people robbery,people robbery,,fas,14708 +人文,people roof,people roof,,fas,14708 +人文,person,person,,fas,14708 +人文,person arrow down to line,person arrow down to line,,fas,14708 +人文,person arrow up from line,person arrow up from line,,fas,14708 +人文,person breastfeeding,person breastfeeding,,fas,14708 +人文,person burst,person burst,,fas,14708 +人文,person cane,person cane,,fas,14708 +人文,person chalkboard,person chalkboard,,fas,14708 +人文,person circle check,person circle check,,fas,14708 +人文,person circle exclamation,person circle exclamation,,fas,14708 +人文,person circle minus,person circle minus,,fas,14708 +人文,person circle plus,person circle plus,,fas,14708 +人文,person circle question,person circle question,,fas,14708 +人文,person circle xmark,person circle xmark,,fas,14708 +人文,person digging,person digging,,fas,14708 +人文,person dress,person dress,,fas,14708 +人文,person dress burst,person dress burst,,fas,14708 +人文,person drowning,person drowning,,fas,14708 +人文,person falling,person falling,,fas,14708 +人文,person falling burst,person falling burst,,fas,14708 +人文,person half dress,person half dress,,fas,14708 +人文,person harassing,person harassing,,fas,14708 +人文,person military pointing,person military pointing,,fas,14708 +人文,person military rifle,person military rifle,,fas,14708 +人文,person military to person,person military to person,,fas,14708 +人文,person pregnant,person pregnant,,fas,14708 +人文,person rays,person rays,,fas,14708 +人文,person rifle,person rifle,,fas,14708 +人文,person shelter,person shelter,,fas,14708 +人文,person through window,person through window,,fas,14708 +人文,person walking,person walking,,fas,14708 +人文,person walking arrow loop left,person walking arrow loop left,,fas,14708 +人文,person walking arrow right,person walking arrow right,,fas,14708 +人文,person walking dashed line arrow right,person walking dashed line arrow right,,fas,14708 +人文,person walking luggage,person walking luggage,,fas,14708 +人文,pills,pills,,fas,14708 +人文,plane circle check,plane circle check,,fas,14708 +人文,plane circle exclamation,plane circle exclamation,,fas,14708 +人文,plane circle xmark,plane circle xmark,,fas,14708 +人文,plane lock,plane lock,,fas,14708 +人文,plane up,plane up,,fas,14708 +人文,plant wilt,plant wilt,,fas,14708 +人文,plate wheat,plate wheat,,fas,14708 +人文,plug,plug,,fas,14708 +人文,plug circle bolt,plug circle bolt,,fas,14708 +人文,plug circle check,plug circle check,,fas,14708 +人文,plug circle exclamation,plug circle exclamation,,fas,14708 +人文,plug circle minus,plug circle minus,,fas,14708 +人文,plug circle plus,plug circle plus,,fas,14708 +人文,plug circle xmark,plug circle xmark,,fas,14708 +人文,pump soap,pump soap,,fas,14708 +人文,radiation,radiation,,fas,14708 +人文,radio,radio,,fas,14708 +人文,ranking star,ranking star,,fas,14708 +人文,road,road,,fas,14708 +人文,road barrier,road barrier,,fas,14708 +人文,road bridge,road bridge,,fas,14708 +人文,road circle check,road circle check,,fas,14708 +人文,road circle exclamation,road circle exclamation,,fas,14708 +人文,road circle xmark,road circle xmark,,fas,14708 +人文,road lock,road lock,,fas,14708 +人文,road spikes,road spikes,,fas,14708 +人文,rug,rug,,fas,14708 +人文,sack dollar,sack dollar,,fas,14708 +人文,sack xmark,sack xmark,,fas,14708 +人文,sailboat,sailboat,,fas,14708 +人文,satellite dish,satellite dish,,fas,14708 +人文,scale balanced,scale balanced,,fas,14708 +人文,school,school,,fas,14708 +人文,school circle check,school circle check,,fas,14708 +人文,school circle exclamation,school circle exclamation,,fas,14708 +人文,school circle xmark,school circle xmark,,fas,14708 +人文,school flag,school flag,,fas,14708 +人文,school lock,school lock,,fas,14708 +人文,seedling,seedling,,fas,14708 +人文,sheet plastic,sheet plastic,,fas,14708 +人文,shield cat,shield cat,,fas,14708 +人文,shield dog,shield dog,,fas,14708 +人文,shield heart,shield heart,,fas,14708 +人文,ship,ship,,fas,14708 +人文,shirt,shirt,,fas,14708 +人文,shop,shop,,fas,14708 +人文,shop lock,shop lock,,fas,14708 +人文,shower,shower,,fas,14708 +人文,skull crossbones,skull crossbones,,fas,14708 +人文,snowflake,snowflake,,far,14708 +人文,snowflake,snowflake,,fas,14708 +人文,soap,soap,,fas,14708 +人文,square nfi,square nfi,,fas,14708 +人文,square person confined,square person confined,,fas,14708 +人文,square virus,square virus,,fas,14708 +人文,staff snake,staff snake,,fas,14708 +人文,stethoscope,stethoscope,,fas,14708 +人文,suitcase medical,suitcase medical,,fas,14708 +人文,sun plant wilt,sun plant wilt,,fas,14708 +人文,syringe,syringe,,fas,14708 +人文,tarp,tarp,,fas,14708 +人文,tarp droplet,tarp droplet,,fas,14708 +人文,temperature arrow down,temperature arrow down,,fas,14708 +人文,temperature arrow up,temperature arrow up,,fas,14708 +人文,tent,tent,,fas,14708 +人文,tent arrow down to line,tent arrow down to line,,fas,14708 +人文,tent arrow left right,tent arrow left right,,fas,14708 +人文,tent arrow turn left,tent arrow turn left,,fas,14708 +人文,tent arrows down,tent arrows down,,fas,14708 +人文,tents,tents,,fas,14708 +人文,toilet,toilet,,fas,14708 +人文,toilet portable,toilet portable,,fas,14708 +人文,toilets portable,toilets portable,,fas,14708 +人文,tornado,tornado,,fas,14708 +人文,tower broadcast,tower broadcast,,fas,14708 +人文,tower cell,tower cell,,fas,14708 +人文,tower observation,tower observation,,fas,14708 +人文,train subway,train subway,,fas,14708 +人文,trash can,trash can,,far,14708 +人文,trash can,trash can,,fas,14708 +人文,tree city,tree city,,fas,14708 +人文,trowel,trowel,,fas,14708 +人文,trowel bricks,trowel bricks,,fas,14708 +人文,truck,truck,,fas,14708 +人文,truck arrow right,truck arrow right,,fas,14708 +人文,truck droplet,truck droplet,,fas,14708 +人文,truck field,truck field,,fas,14708 +人文,truck field un,truck field un,,fas,14708 +人文,truck front,truck front,,fas,14708 +人文,truck medical,truck medical,,fas,14708 +人文,truck plane,truck plane,,fas,14708 +人文,user doctor,user doctor,,fas,14708 +人文,user injured,user injured,,fas,14708 +人文,users between lines,users between lines,,fas,14708 +人文,users line,users line,,fas,14708 +人文,users rays,users rays,,fas,14708 +人文,users rectangle,users rectangle,,fas,14708 +人文,users viewfinder,users viewfinder,,fas,14708 +人文,vial circle check,vial circle check,,fas,14708 +人文,vial virus,vial virus,,fas,14708 +人文,vihara,vihara,,fas,14708 +人文,virus,virus,,fas,14708 +人文,virus covid,virus covid,,fas,14708 +人文,volcano,volcano,,fas,14708 +人文,walkie talkie,walkie talkie,,fas,14708 +人文,wheat awn,wheat awn,,fas,14708 +人文,wheat awn circle exclamation,wheat awn circle exclamation,,fas,14708 +人文,wheelchair move,wheelchair move,,fas,14708 +人文,wifi,wifi,,fas,14708 +人文,wind,wind,,fas,14708 +人文,worm,worm,,fas,14708 +人文,xmarks lines,xmarks lines,,fas,14708 +商务,address book,address book,,far,14708 +商务,address book,address book,,fas,14708 +商务,address card,address card,,far,14708 +商务,address card,address card,,fas,14708 +商务,arrows spin,arrows spin,,fas,14708 +商务,arrows to dot,arrows to dot,,fas,14708 +商务,arrows to eye,arrows to eye,,fas,14708 +商务,bars progress,bars progress,,fas,14708 +商务,bars staggered,bars staggered,,fas,14708 +商务,book,book,,fas,14708 +商务,box archive,box archive,,fas,14708 +商务,boxes packing,boxes packing,,fas,14708 +商务,briefcase,briefcase,,fas,14708 +商务,building,building,,far,14708 +商务,building,building,,fas,14708 +商务,bullhorn,bullhorn,,fas,14708 +商务,bullseye,bullseye,,fas,14708 +商务,business time,business time,,fas,14708 +商务,cake candles,cake candles,,fas,14708 +商务,calculator,calculator,,fas,14708 +商务,calendar,calendar,,far,14708 +商务,calendar,calendar,,fas,14708 +商务,calendar days,calendar days,,far,14708 +商务,calendar days,calendar days,,fas,14708 +商务,certificate,certificate,,fas,14708 +商务,chart line,chart line,,fas,14708 +商务,chart pie,chart pie,,fas,14708 +商务,chart simple,chart simple,,fas,14708 +商务,city,city,,fas,14708 +商务,clipboard,clipboard,,far,14708 +商务,clipboard,clipboard,,fas,14708 +商务,clipboard question,clipboard question,,fas,14708 +商务,compass,compass,,far,14708 +商务,compass,compass,,fas,14708 +商务,copy,copy,,far,14708 +商务,copy,copy,,fas,14708 +商务,copyright,copyright,,far,14708 +商务,copyright,copyright,,fas,14708 +商务,envelope,envelope,,far,14708 +商务,envelope,envelope,,fas,14708 +商务,envelope circle check,envelope circle check,,fas,14708 +商务,envelope open,envelope open,,far,14708 +商务,envelope open,envelope open,,fas,14708 +商务,eraser,eraser,,fas,14708 +商务,fax,fax,,fas,14708 +商务,file,file,,far,14708 +商务,file,file,,fas,14708 +商务,file circle plus,file circle plus,,fas,14708 +商务,file lines,file lines,,far,14708 +商务,file lines,file lines,,fas,14708 +商务,floppy disk,floppy disk,,far,14708 +商务,floppy disk,floppy disk,,fas,14708 +商务,folder,folder,,far,14708 +商务,folder,folder,,fas,14708 +商务,folder minus,folder minus,,fas,14708 +商务,folder open,folder open,,far,14708 +商务,folder open,folder open,,fas,14708 +商务,folder plus,folder plus,,fas,14708 +商务,folder tree,folder tree,,fas,14708 +商务,glasses,glasses,,fas,14708 +商务,globe,globe,,fas,14708 +商务,highlighter,highlighter,,fas,14708 +商务,house laptop,house laptop,,fas,14708 +商务,industry,industry,,fas,14708 +商务,landmark,landmark,,fas,14708 +商务,laptop file,laptop file,,fas,14708 +商务,list check,list check,,fas,14708 +商务,magnifying glass arrow right,magnifying glass arrow right,,fas,14708 +商务,magnifying glass chart,magnifying glass chart,,fas,14708 +商务,marker,marker,,fas,14708 +商务,mug saucer,mug saucer,,fas,14708 +商务,network wired,network wired,,fas,14708 +商务,note sticky,note sticky,,far,14708 +商务,note sticky,note sticky,,fas,14708 +商务,paperclip,paperclip,,fas,14708 +商务,paste,paste,,far,14708 +商务,paste,paste,,fas,14708 +商务,pen,pen,,fas,14708 +商务,pen clip,pen clip,,fas,14708 +商务,pen fancy,pen fancy,,fas,14708 +商务,pen nib,pen nib,,fas,14708 +商务,pen to square,pen to square,,far,14708 +商务,pen to square,pen to square,,fas,14708 +商务,pencil,pencil,,fas,14708 +商务,percent,percent,%,fas,14708 +商务,person chalkboard,person chalkboard,,fas,14708 +商务,phone,phone,,fas,14708 +商务,phone flip,phone flip,,fas,14708 +商务,phone slash,phone slash,,fas,14708 +商务,phone volume,phone volume,,fas,14708 +商务,print,print,,fas,14708 +商务,registered,registered,,far,14708 +商务,registered,registered,,fas,14708 +商务,scale balanced,scale balanced,,fas,14708 +商务,scale unbalanced,scale unbalanced,,fas,14708 +商务,scale unbalanced flip,scale unbalanced flip,,fas,14708 +商务,scissors,scissors,,fas,14708 +商务,signature,signature,,fas,14708 +商务,sitemap,sitemap,,fas,14708 +商务,socks,socks,,fas,14708 +商务,square envelope,square envelope,,fas,14708 +商务,square pen,square pen,,fas,14708 +商务,square phone,square phone,,fas,14708 +商务,square phone flip,square phone flip,,fas,14708 +商务,square poll horizontal,square poll horizontal,,fas,14708 +商务,square poll vertical,square poll vertical,,fas,14708 +商务,stapler,stapler,,fas,14708 +商务,table,table,,fas,14708 +商务,table columns,table columns,,fas,14708 +商务,tag,tag,,fas,14708 +商务,tags,tags,,fas,14708 +商务,thumbtack,thumbtack,,fas,14708 +商务,timeline,timeline,,fas,14708 +商务,trademark,trademark,,fas,14708 +商务,vault,vault,,fas,14708 +商务,wallet,wallet,,fas,14708 +设备和硬件,blender phone,blender phone,,fas,14708 +设备和硬件,camera,camera,,fas,14708 +设备和硬件,camera retro,camera retro,,fas,14708 +设备和硬件,car battery,car battery,,fas,14708 +设备和硬件,compact disc,compact disc,,fas,14708 +设备和硬件,computer,computer,,fas,14708 +设备和硬件,computer mouse,computer mouse,,fas,14708 +设备和硬件,database,database,,fas,14708 +设备和硬件,desktop,desktop,,fas,14708 +设备和硬件,display,display,,fas,14708 +设备和硬件,download,download,,fas,14708 +设备和硬件,ethernet,ethernet,,fas,14708 +设备和硬件,fax,fax,,fas,14708 +设备和硬件,floppy disk,floppy disk,,far,14708 +设备和硬件,floppy disk,floppy disk,,fas,14708 +设备和硬件,gamepad,gamepad,,fas,14708 +设备和硬件,hard drive,hard drive,,far,14708 +设备和硬件,hard drive,hard drive,,fas,14708 +设备和硬件,headphones,headphones,,fas,14708 +设备和硬件,house laptop,house laptop,,fas,14708 +设备和硬件,keyboard,keyboard,,far,14708 +设备和硬件,keyboard,keyboard,,fas,14708 +设备和硬件,laptop,laptop,,fas,14708 +设备和硬件,laptop file,laptop file,,fas,14708 +设备和硬件,memory,memory,,fas,14708 +设备和硬件,microchip,microchip,,fas,14708 +设备和硬件,mobile,mobile,,fas,14708 +设备和硬件,mobile button,mobile button,,fas,14708 +设备和硬件,mobile retro,mobile retro,,fas,14708 +设备和硬件,mobile screen,mobile screen,,fas,14708 +设备和硬件,mobile screen button,mobile screen button,,fas,14708 +设备和硬件,plug,plug,,fas,14708 +设备和硬件,power off,power off,,fas,14708 +设备和硬件,print,print,,fas,14708 +设备和硬件,satellite,satellite,,fas,14708 +设备和硬件,satellite dish,satellite dish,,fas,14708 +设备和硬件,sd card,sd card,,fas,14708 +设备和硬件,server,server,,fas,14708 +设备和硬件,sim card,sim card,,fas,14708 +设备和硬件,tablet,tablet,,fas,14708 +设备和硬件,tablet button,tablet button,,fas,14708 +设备和硬件,tablet screen button,tablet screen button,,fas,14708 +设备和硬件,tachograph digital,tachograph digital,,fas,14708 +设备和硬件,tv,tv,,fas,14708 +设备和硬件,upload,upload,,fas,14708 +设备和硬件,walkie talkie,walkie talkie,,fas,14708 +设计,bezier curve,bezier curve,,fas,14708 +设计,brush,brush,,fas,14708 +设计,circle half stroke,circle half stroke,,fas,14708 +设计,circle nodes,circle nodes,,fas,14708 +设计,clone,clone,,far,14708 +设计,clone,clone,,fas,14708 +设计,compass drafting,compass drafting,,fas,14708 +设计,copy,copy,,far,14708 +设计,copy,copy,,fas,14708 +设计,crop,crop,,fas,14708 +设计,crop simple,crop simple,,fas,14708 +设计,crosshairs,crosshairs,,fas,14708 +设计,cube,cube,,fas,14708 +设计,cubes,cubes,,fas,14708 +设计,draw polygon,draw polygon,,fas,14708 +设计,droplet,droplet,,fas,14708 +设计,droplet slash,droplet slash,,fas,14708 +设计,eraser,eraser,,fas,14708 +设计,eye,eye,,far,14708 +设计,eye,eye,,fas,14708 +设计,eye dropper,eye dropper,,fas,14708 +设计,eye slash,eye slash,,far,14708 +设计,eye slash,eye slash,,fas,14708 +设计,fill,fill,,fas,14708 +设计,fill drip,fill drip,,fas,14708 +设计,floppy disk,floppy disk,,far,14708 +设计,floppy disk,floppy disk,,fas,14708 +设计,font awesome,font awesome,,fab,14708 +设计,font awesome,font awesome,,far,14708 +设计,font awesome,font awesome,,fas,14708 +设计,highlighter,highlighter,,fas,14708 +设计,icons,icons,,fas,14708 +设计,layer group,layer group,,fas,14708 +设计,lines leaning,lines leaning,,fas,14708 +设计,marker,marker,,fas,14708 +设计,object group,object group,,far,14708 +设计,object group,object group,,fas,14708 +设计,object ungroup,object ungroup,,far,14708 +设计,object ungroup,object ungroup,,fas,14708 +设计,paint roller,paint roller,,fas,14708 +设计,paintbrush,paintbrush,,fas,14708 +设计,palette,palette,,fas,14708 +设计,paste,paste,,far,14708 +设计,paste,paste,,fas,14708 +设计,pen,pen,,fas,14708 +设计,pen clip,pen clip,,fas,14708 +设计,pen fancy,pen fancy,,fas,14708 +设计,pen nib,pen nib,,fas,14708 +设计,pen ruler,pen ruler,,fas,14708 +设计,pen to square,pen to square,,far,14708 +设计,pen to square,pen to square,,fas,14708 +设计,pencil,pencil,,fas,14708 +设计,ruler combined,ruler combined,,fas,14708 +设计,ruler horizontal,ruler horizontal,,fas,14708 +设计,ruler vertical,ruler vertical,,fas,14708 +设计,scissors,scissors,,fas,14708 +设计,splotch,splotch,,fas,14708 +设计,spray can,spray can,,fas,14708 +设计,stamp,stamp,,fas,14708 +设计,stapler,stapler,,fas,14708 +设计,swatchbook,swatchbook,,fas,14708 +设计,vector square,vector square,,fas,14708 +设计,wand magic,wand magic,,fas,14708 +设计,wand magic sparkles,wand magic sparkles,,fas,14708 +社交,bell,bell,,far,14708 +社交,bell,bell,,fas,14708 +社交,cake candles,cake candles,,fas,14708 +社交,camera,camera,,fas,14708 +社交,circle user,circle user,,far,14708 +社交,circle user,circle user,,fas,14708 +社交,comment,comment,,far,14708 +社交,comment,comment,,fas,14708 +社交,envelope,envelope,,far,14708 +社交,envelope,envelope,,fas,14708 +社交,hashtag,hashtag,#,fas,14708 +社交,heart,heart,,far,14708 +社交,heart,heart,,fas,14708 +社交,icons,icons,,fas,14708 +社交,image,image,,far,14708 +社交,image,image,,fas,14708 +社交,images,images,,far,14708 +社交,images,images,,fas,14708 +社交,location dot,location dot,,fas,14708 +社交,location pin,location pin,,fas,14708 +社交,message,message,,far,14708 +社交,message,message,,fas,14708 +社交,photo film,photo film,,fas,14708 +社交,retweet,retweet,,fas,14708 +社交,share,share,,fas,14708 +社交,share from square,share from square,,far,14708 +社交,share from square,share from square,,fas,14708 +社交,share nodes,share nodes,,fas,14708 +社交,square poll horizontal,square poll horizontal,,fas,14708 +社交,square poll vertical,square poll vertical,,fas,14708 +社交,square share nodes,square share nodes,,fas,14708 +社交,star,star,,far,14708 +社交,star,star,,fas,14708 +社交,thumbs down,thumbs down,,far,14708 +社交,thumbs down,thumbs down,,fas,14708 +社交,thumbs up,thumbs up,,far,14708 +社交,thumbs up,thumbs up,,fas,14708 +社交,thumbtack,thumbtack,,fas,14708 +社交,user,user,,far,14708 +社交,user,user,,fas,14708 +社交,user group,user group,,fas,14708 +社交,user plus,user plus,,fas,14708 +社交,users,users,,fas,14708 +社交,video,video,,fas,14708 +时间,bell,bell,,far,14708 +时间,bell,bell,,fas,14708 +时间,bell slash,bell slash,,far,14708 +时间,bell slash,bell slash,,fas,14708 +时间,calendar,calendar,,far,14708 +时间,calendar,calendar,,fas,14708 +时间,calendar check,calendar check,,far,14708 +时间,calendar check,calendar check,,fas,14708 +时间,calendar day,calendar day,,fas,14708 +时间,calendar days,calendar days,,far,14708 +时间,calendar days,calendar days,,fas,14708 +时间,calendar minus,calendar minus,,far,14708 +时间,calendar minus,calendar minus,,fas,14708 +时间,calendar plus,calendar plus,,far,14708 +时间,calendar plus,calendar plus,,fas,14708 +时间,calendar week,calendar week,,fas,14708 +时间,calendar xmark,calendar xmark,,far,14708 +时间,calendar xmark,calendar xmark,,fas,14708 +时间,clock,clock,,far,14708 +时间,clock,clock,,fas,14708 +时间,hourglass,hourglass,,far,14708 +时间,hourglass,hourglass,,fas,14708 +时间,hourglass end,hourglass end,,fas,14708 +时间,hourglass half,hourglass half,,far,14708 +时间,hourglass half,hourglass half,,fas,14708 +时间,hourglass start,hourglass start,,fas,14708 +时间,stopwatch,stopwatch,,fas,14708 +时间,stopwatch 20,stopwatch 20,,fas,14708 +食物和饮料,apple whole,apple whole,,fas,14708 +食物和饮料,bacon,bacon,,fas,14708 +食物和饮料,beer mug empty,beer mug empty,,fas,14708 +食物和饮料,blender,blender,,fas,14708 +食物和饮料,bone,bone,,fas,14708 +食物和饮料,bottle droplet,bottle droplet,,fas,14708 +食物和饮料,bottle water,bottle water,,fas,14708 +食物和饮料,bowl food,bowl food,,fas,14708 +食物和饮料,bowl rice,bowl rice,,fas,14708 +食物和饮料,bread slice,bread slice,,fas,14708 +食物和饮料,burger,burger,,fas,14708 +食物和饮料,cake candles,cake candles,,fas,14708 +食物和饮料,candy cane,candy cane,,fas,14708 +食物和饮料,carrot,carrot,,fas,14708 +食物和饮料,champagne glasses,champagne glasses,,fas,14708 +食物和饮料,cheese,cheese,,fas,14708 +食物和饮料,cloud meatball,cloud meatball,,fas,14708 +食物和饮料,cookie,cookie,,fas,14708 +食物和饮料,cubes stacked,cubes stacked,,fas,14708 +食物和饮料,drumstick bite,drumstick bite,,fas,14708 +食物和饮料,egg,egg,,fas,14708 +食物和饮料,fish,fish,,fas,14708 +食物和饮料,fish fins,fish fins,,fas,14708 +食物和饮料,flask,flask,,fas,14708 +食物和饮料,glass water,glass water,,fas,14708 +食物和饮料,glass water droplet,glass water droplet,,fas,14708 +食物和饮料,hotdog,hotdog,,fas,14708 +食物和饮料,ice cream,ice cream,,fas,14708 +食物和饮料,jar,jar,,fas,14708 +食物和饮料,jar wheat,jar wheat,,fas,14708 +食物和饮料,lemon,lemon,,far,14708 +食物和饮料,lemon,lemon,,fas,14708 +食物和饮料,martini glass,martini glass,,fas,14708 +食物和饮料,martini glass citrus,martini glass citrus,,fas,14708 +食物和饮料,martini glass empty,martini glass empty,,fas,14708 +食物和饮料,mug hot,mug hot,,fas,14708 +食物和饮料,mug saucer,mug saucer,,fas,14708 +食物和饮料,pepper hot,pepper hot,,fas,14708 +食物和饮料,pizza slice,pizza slice,,fas,14708 +食物和饮料,plate wheat,plate wheat,,fas,14708 +食物和饮料,seedling,seedling,,fas,14708 +食物和饮料,shrimp,shrimp,,fas,14708 +食物和饮料,stroopwafel,stroopwafel,,fas,14708 +食物和饮料,wheat awn,wheat awn,,fas,14708 +食物和饮料,wheat awn circle exclamation,wheat awn circle exclamation,,fas,14708 +食物和饮料,whiskey glass,whiskey glass,,fas,14708 +食物和饮料,wine bottle,wine bottle,,fas,14708 +食物和饮料,wine glass,wine glass,,fas,14708 +食物和饮料,wine glass empty,wine glass empty,,fas,14708 +市场营销,arrows spin,arrows spin,,fas,14708 +市场营销,arrows to dot,arrows to dot,,fas,14708 +市场营销,arrows to eye,arrows to eye,,fas,14708 +市场营销,bullhorn,bullhorn,,fas,14708 +市场营销,bullseye,bullseye,,fas,14708 +市场营销,chart simple,chart simple,,fas,14708 +市场营销,comment dollar,comment dollar,,fas,14708 +市场营销,comments dollar,comments dollar,,fas,14708 +市场营销,envelope open text,envelope open text,,fas,14708 +市场营销,envelopes bulk,envelopes bulk,,fas,14708 +市场营销,filter circle dollar,filter circle dollar,,fas,14708 +市场营销,group arrows rotate,group arrows rotate,,fas,14708 +市场营销,lightbulb,lightbulb,,far,14708 +市场营销,lightbulb,lightbulb,,fas,14708 +市场营销,magnifying glass arrow right,magnifying glass arrow right,,fas,14708 +市场营销,magnifying glass chart,magnifying glass chart,,fas,14708 +市场营销,magnifying glass dollar,magnifying glass dollar,,fas,14708 +市场营销,magnifying glass location,magnifying glass location,,fas,14708 +市场营销,people group,people group,,fas,14708 +市场营销,person rays,person rays,,fas,14708 +市场营销,ranking star,ranking star,,fas,14708 +市场营销,rectangle ad,rectangle ad,,fas,14708 +市场营销,square poll horizontal,square poll horizontal,,fas,14708 +市场营销,square poll vertical,square poll vertical,,fas,14708 +市场营销,timeline,timeline,,fas,14708 +手,hand,hand,,far,14708 +手,hand,hand,,fas,14708 +手,hand back fist,hand back fist,,far,14708 +手,hand back fist,hand back fist,,fas,14708 +手,hand dots,hand dots,,fas,14708 +手,hand fist,hand fist,,fas,14708 +手,hand holding,hand holding,,fas,14708 +手,hand holding dollar,hand holding dollar,,fas,14708 +手,hand holding droplet,hand holding droplet,,fas,14708 +手,hand holding hand,hand holding hand,,fas,14708 +手,hand holding heart,hand holding heart,,fas,14708 +手,hand holding medical,hand holding medical,,fas,14708 +手,hand lizard,hand lizard,,far,14708 +手,hand lizard,hand lizard,,fas,14708 +手,hand middle finger,hand middle finger,,fas,14708 +手,hand peace,hand peace,,far,14708 +手,hand peace,hand peace,,fas,14708 +手,hand point down,hand point down,,far,14708 +手,hand point down,hand point down,,fas,14708 +手,hand point left,hand point left,,far,14708 +手,hand point left,hand point left,,fas,14708 +手,hand point right,hand point right,,far,14708 +手,hand point right,hand point right,,fas,14708 +手,hand point up,hand point up,,far,14708 +手,hand point up,hand point up,,fas,14708 +手,hand pointer,hand pointer,,far,14708 +手,hand pointer,hand pointer,,fas,14708 +手,hand scissors,hand scissors,,far,14708 +手,hand scissors,hand scissors,,fas,14708 +手,hand sparkles,hand sparkles,,fas,14708 +手,hand spock,hand spock,,far,14708 +手,hand spock,hand spock,,fas,14708 +手,hands bound,hands bound,,fas,14708 +手,hands bubbles,hands bubbles,,fas,14708 +手,hands clapping,hands clapping,,fas,14708 +手,hands holding,hands holding,,fas,14708 +手,hands holding child,hands holding child,,fas,14708 +手,hands holding circle,hands holding circle,,fas,14708 +手,hands praying,hands praying,,fas,14708 +手,handshake,handshake,,far,14708 +手,handshake,handshake,,fas,14708 +手,handshake angle,handshake angle,,fas,14708 +手,handshake simple,handshake simple,,fas,14708 +手,handshake simple slash,handshake simple slash,,fas,14708 +手,handshake slash,handshake slash,,fas,14708 +手,thumbs down,thumbs down,,far,14708 +手,thumbs down,thumbs down,,fas,14708 +手,thumbs up,thumbs up,,far,14708 +手,thumbs up,thumbs up,,fas,14708 +数学计算,calculator,calculator,,fas,14708 +数学计算,circle minus,circle minus,,fas,14708 +数学计算,circle plus,circle plus,,fas,14708 +数学计算,circle xmark,circle xmark,,far,14708 +数学计算,circle xmark,circle xmark,,fas,14708 +数学计算,divide,divide,,fas,14708 +数学计算,equals,equals,=,fas,14708 +数学计算,greater than,greater than,>,fas,14708 +数学计算,greater than equal,greater than equal,,fas,14708 +数学计算,infinity,infinity,,fas,14708 +数学计算,less than,less than,<,fas,14708 +数学计算,less than equal,less than equal,,fas,14708 +数学计算,minus,minus,,fas,14708 +数学计算,not equal,not equal,,fas,14708 +数学计算,percent,percent,%,fas,14708 +数学计算,plus,plus,+,fas,14708 +数学计算,plus minus,plus minus,,fas,14708 +数学计算,square minus,square minus,,far,14708 +数学计算,square minus,square minus,,fas,14708 +数学计算,square root variable,square root variable,,fas,14708 +数学计算,square xmark,square xmark,,fas,14708 +数学计算,subscript,subscript,,fas,14708 +数学计算,superscript,superscript,,fas,14708 +数学计算,wave square,wave square,,fas,14708 +数学计算,xmark,xmark,,fas,14708 +数字,0,0,0,fas,14708 +数字,1,1,1,fas,14708 +数字,2,2,2,fas,14708 +数字,3,3,3,fas,14708 +数字,4,4,4,fas,14708 +数字,5,5,5,fas,14708 +数字,6,6,6,fas,14708 +数字,7,7,7,fas,14708 +数字,8,8,8,fas,14708 +数字,9,9,9,fas,14708 +水果和蔬菜,apple whole,apple whole,,fas,14708 +水果和蔬菜,carrot,carrot,,fas,14708 +水果和蔬菜,leaf,leaf,,fas,14708 +水果和蔬菜,lemon,lemon,,far,14708 +水果和蔬菜,lemon,lemon,,fas,14708 +水果和蔬菜,pepper hot,pepper hot,,fas,14708 +水果和蔬菜,seedling,seedling,,fas,14708 +天文学,globe,globe,,fas,14708 +天文学,meteor,meteor,,fas,14708 +天文学,moon,moon,,far,14708 +天文学,moon,moon,,fas,14708 +天文学,satellite,satellite,,fas,14708 +天文学,satellite dish,satellite dish,,fas,14708 +天文学,shuttle space,shuttle space,,fas,14708 +天文学,user astronaut,user astronaut,,fas,14708 +通讯,address book,address book,,far,14708 +通讯,address book,address book,,fas,14708 +通讯,address card,address card,,far,14708 +通讯,address card,address card,,fas,14708 +通讯,at,at,@,fas,14708 +通讯,blender phone,blender phone,,fas,14708 +通讯,bluetooth b,bluetooth b,,fab,14708 +通讯,bullhorn,bullhorn,,fas,14708 +通讯,comment,comment,,far,14708 +通讯,comment,comment,,fas,14708 +通讯,comment dots,comment dots,,far,14708 +通讯,comment dots,comment dots,,fas,14708 +通讯,comment medical,comment medical,,fas,14708 +通讯,comment slash,comment slash,,fas,14708 +通讯,comment sms,comment sms,,fas,14708 +通讯,comments,comments,,far,14708 +通讯,comments,comments,,fas,14708 +通讯,ear listen,ear listen,,fas,14708 +通讯,envelope,envelope,,far,14708 +通讯,envelope,envelope,,fas,14708 +通讯,envelope circle check,envelope circle check,,fas,14708 +通讯,envelope open,envelope open,,far,14708 +通讯,envelope open,envelope open,,fas,14708 +通讯,face frown,face frown,,far,14708 +通讯,face frown,face frown,,fas,14708 +通讯,face meh,face meh,,far,14708 +通讯,face meh,face meh,,fas,14708 +通讯,face smile,face smile,,far,14708 +通讯,face smile,face smile,,fas,14708 +通讯,fax,fax,,fas,14708 +通讯,hands asl interpreting,hands asl interpreting,,fas,14708 +通讯,icons,icons,,fas,14708 +通讯,inbox,inbox,,fas,14708 +通讯,language,language,,fas,14708 +通讯,message,message,,far,14708 +通讯,message,message,,fas,14708 +通讯,microphone,microphone,,fas,14708 +通讯,microphone lines,microphone lines,,fas,14708 +通讯,microphone lines slash,microphone lines slash,,fas,14708 +通讯,microphone slash,microphone slash,,fas,14708 +通讯,mobile,mobile,,fas,14708 +通讯,mobile button,mobile button,,fas,14708 +通讯,mobile retro,mobile retro,,fas,14708 +通讯,mobile screen,mobile screen,,fas,14708 +通讯,mobile screen button,mobile screen button,,fas,14708 +通讯,paper plane,paper plane,,far,14708 +通讯,paper plane,paper plane,,fas,14708 +通讯,phone,phone,,fas,14708 +通讯,phone flip,phone flip,,fas,14708 +通讯,phone slash,phone slash,,fas,14708 +通讯,phone volume,phone volume,,fas,14708 +通讯,poo,poo,,fas,14708 +通讯,quote left,quote left,,fas,14708 +通讯,quote right,quote right,,fas,14708 +通讯,square envelope,square envelope,,fas,14708 +通讯,square phone,square phone,,fas,14708 +通讯,square phone flip,square phone flip,,fas,14708 +通讯,square rss,square rss,,fas,14708 +通讯,tower cell,tower cell,,fas,14708 +通讯,tty,tty,,fas,14708 +通讯,video,video,,fas,14708 +通讯,video slash,video slash,,fas,14708 +通讯,voicemail,voicemail,,fas,14708 +通讯,walkie talkie,walkie talkie,,fas,14708 +童年,apple whole,apple whole,,fas,14708 +童年,baby,baby,,fas,14708 +童年,baby carriage,baby carriage,,fas,14708 +童年,baseball bat ball,baseball bat ball,,fas,14708 +童年,bath,bath,,fas,14708 +童年,bucket,bucket,,fas,14708 +童年,cake candles,cake candles,,fas,14708 +童年,child,child,,fas,14708 +童年,child dress,child dress,,fas,14708 +童年,child reaching,child reaching,,fas,14708 +童年,children,children,,fas,14708 +童年,cookie,cookie,,fas,14708 +童年,cookie bite,cookie bite,,fas,14708 +童年,cubes stacked,cubes stacked,,fas,14708 +童年,gamepad,gamepad,,fas,14708 +童年,hands holding child,hands holding child,,fas,14708 +童年,ice cream,ice cream,,fas,14708 +童年,mitten,mitten,,fas,14708 +童年,person biking,person biking,,fas,14708 +童年,person breastfeeding,person breastfeeding,,fas,14708 +童年,puzzle piece,puzzle piece,,fas,14708 +童年,robot,robot,,fas,14708 +童年,school,school,,fas,14708 +童年,shapes,shapes,,fas,14708 +童年,snowman,snowman,,fas,14708 +图表,bars progress,bars progress,,fas,14708 +图表,chart area,chart area,,fas,14708 +图表,chart bar,chart bar,,far,14708 +图表,chart bar,chart bar,,fas,14708 +图表,chart column,chart column,,fas,14708 +图表,chart gantt,chart gantt,,fas,14708 +图表,chart line,chart line,,fas,14708 +图表,chart pie,chart pie,,fas,14708 +图表,chart simple,chart simple,,fas,14708 +图表,circle half stroke,circle half stroke,,fas,14708 +图表,diagram next,diagram next,,fas,14708 +图表,diagram predecessor,diagram predecessor,,fas,14708 +图表,diagram project,diagram project,,fas,14708 +图表,diagram successor,diagram successor,,fas,14708 +图表,square poll horizontal,square poll horizontal,,fas,14708 +图表,square poll vertical,square poll vertical,,fas,14708 +万圣节,book skull,book skull,,fas,14708 +万圣节,broom,broom,,fas,14708 +万圣节,cat,cat,,fas,14708 +万圣节,cloud moon,cloud moon,,fas,14708 +万圣节,crow,crow,,fas,14708 +万圣节,ghost,ghost,,fas,14708 +万圣节,hat wizard,hat wizard,,fas,14708 +万圣节,mask,mask,,fas,14708 +万圣节,skull,skull,,fas,14708 +万圣节,skull crossbones,skull crossbones,,fas,14708 +万圣节,spider,spider,,fas,14708 +万圣节,toilet paper,toilet paper,,fas,14708 +万圣节,wand sparkles,wand sparkles,,fas,14708 +文本格式,align center,align center,,fas,14708 +文本格式,align justify,align justify,,fas,14708 +文本格式,align left,align left,,fas,14708 +文本格式,align right,align right,,fas,14708 +文本格式,bold,bold,,fas,14708 +文本格式,border all,border all,,fas,14708 +文本格式,border none,border none,,fas,14708 +文本格式,border top left,border top left,,fas,14708 +文本格式,check,check,,fas,14708 +文本格式,check double,check double,,fas,14708 +文本格式,circle check,circle check,,far,14708 +文本格式,circle check,circle check,,fas,14708 +文本格式,filter circle xmark,filter circle xmark,,fas,14708 +文本格式,font,font,,fas,14708 +文本格式,heading,heading,,fas,14708 +文本格式,highlighter,highlighter,,fas,14708 +文本格式,i cursor,i cursor,,fas,14708 +文本格式,icons,icons,,fas,14708 +文本格式,indent,indent,,fas,14708 +文本格式,italic,italic,,fas,14708 +文本格式,list,list,,fas,14708 +文本格式,list check,list check,,fas,14708 +文本格式,list ol,list ol,,fas,14708 +文本格式,list ul,list ul,,fas,14708 +文本格式,outdent,outdent,,fas,14708 +文本格式,paragraph,paragraph,,fas,14708 +文本格式,rectangle list,rectangle list,,far,14708 +文本格式,rectangle list,rectangle list,,fas,14708 +文本格式,spell check,spell check,,fas,14708 +文本格式,square check,square check,,far,14708 +文本格式,square check,square check,,fas,14708 +文本格式,strikethrough,strikethrough,,fas,14708 +文本格式,subscript,subscript,,fas,14708 +文本格式,superscript,superscript,,fas,14708 +文本格式,table,table,,fas,14708 +文本格式,table cells,table cells,,fas,14708 +文本格式,table cells large,table cells large,,fas,14708 +文本格式,table columns,table columns,,fas,14708 +文本格式,table list,table list,,fas,14708 +文本格式,text height,text height,,fas,14708 +文本格式,text slash,text slash,,fas,14708 +文本格式,text width,text width,,fas,14708 +文本格式,underline,underline,,fas,14708 +文件,box archive,box archive,,fas,14708 +文件,clone,clone,,far,14708 +文件,clone,clone,,fas,14708 +文件,copy,copy,,far,14708 +文件,copy,copy,,fas,14708 +文件,file,file,,far,14708 +文件,file,file,,fas,14708 +文件,file arrow down,file arrow down,,fas,14708 +文件,file arrow up,file arrow up,,fas,14708 +文件,file audio,file audio,,far,14708 +文件,file audio,file audio,,fas,14708 +文件,file circle check,file circle check,,fas,14708 +文件,file circle exclamation,file circle exclamation,,fas,14708 +文件,file circle minus,file circle minus,,fas,14708 +文件,file circle plus,file circle plus,,fas,14708 +文件,file circle question,file circle question,,fas,14708 +文件,file circle xmark,file circle xmark,,fas,14708 +文件,file code,file code,,far,14708 +文件,file code,file code,,fas,14708 +文件,file csv,file csv,,fas,14708 +文件,file excel,file excel,,far,14708 +文件,file excel,file excel,,fas,14708 +文件,file export,file export,,fas,14708 +文件,file image,file image,,far,14708 +文件,file image,file image,,fas,14708 +文件,file import,file import,,fas,14708 +文件,file lines,file lines,,far,14708 +文件,file lines,file lines,,fas,14708 +文件,file pdf,file pdf,,far,14708 +文件,file pdf,file pdf,,fas,14708 +文件,file pen,file pen,,fas,14708 +文件,file powerpoint,file powerpoint,,far,14708 +文件,file powerpoint,file powerpoint,,fas,14708 +文件,file shield,file shield,,fas,14708 +文件,file video,file video,,far,14708 +文件,file video,file video,,fas,14708 +文件,file word,file word,,far,14708 +文件,file word,file word,,fas,14708 +文件,file zipper,file zipper,,far,14708 +文件,file zipper,file zipper,,fas,14708 +文件,floppy disk,floppy disk,,far,14708 +文件,floppy disk,floppy disk,,fas,14708 +文件,folder,folder,,far,14708 +文件,folder,folder,,fas,14708 +文件,folder closed,folder closed,,far,14708 +文件,folder closed,folder closed,,fas,14708 +文件,folder open,folder open,,far,14708 +文件,folder open,folder open,,fas,14708 +文件,note sticky,note sticky,,far,14708 +文件,note sticky,note sticky,,fas,14708 +文件,paste,paste,,far,14708 +文件,paste,paste,,fas,14708 +文件,photo film,photo film,,fas,14708 +文件,scissors,scissors,,fas,14708 +无障碍,accessible icon,accessible icon,,fab,14708 +无障碍,audio description,audio description,,fas,14708 +无障碍,braille,braille,,fas,14708 +无障碍,circle info,circle info,,fas,14708 +无障碍,circle question,circle question,,far,14708 +无障碍,circle question,circle question,,fas,14708 +无障碍,closed captioning,closed captioning,,far,14708 +无障碍,closed captioning,closed captioning,,fas,14708 +无障碍,ear deaf,ear deaf,,fas,14708 +无障碍,ear listen,ear listen,,fas,14708 +无障碍,eye,eye,,far,14708 +无障碍,eye,eye,,fas,14708 +无障碍,eye low vision,eye low vision,,fas,14708 +无障碍,fingerprint,fingerprint,,fas,14708 +无障碍,hands,hands,,fas,14708 +无障碍,hands asl interpreting,hands asl interpreting,,fas,14708 +无障碍,handshake angle,handshake angle,,fas,14708 +无障碍,person cane,person cane,,fas,14708 +无障碍,person walking with cane,person walking with cane,,fas,14708 +无障碍,phone volume,phone volume,,fas,14708 +无障碍,question,question,?,fas,14708 +无障碍,tty,tty,,fas,14708 +无障碍,universal access,universal access,,fas,14708 +无障碍,wheelchair,wheelchair,,fas,14708 +无障碍,wheelchair move,wheelchair move,,fas,14708 +形状,bookmark,bookmark,,far,14708 +形状,bookmark,bookmark,,fas,14708 +形状,burst,burst,,fas,14708 +形状,calendar,calendar,,far,14708 +形状,calendar,calendar,,fas,14708 +形状,certificate,certificate,,fas,14708 +形状,circle,circle,,far,14708 +形状,circle,circle,,fas,14708 +形状,circle half stroke,circle half stroke,,fas,14708 +形状,cloud,cloud,,fas,14708 +形状,clover,clover,,fas,14708 +形状,comment,comment,,far,14708 +形状,comment,comment,,fas,14708 +形状,crown,crown,,fas,14708 +形状,cubes stacked,cubes stacked,,fas,14708 +形状,diamond,diamond,,fas,14708 +形状,file,file,,far,14708 +形状,file,file,,fas,14708 +形状,folder,folder,,far,14708 +形状,folder,folder,,fas,14708 +形状,heart,heart,,far,14708 +形状,heart,heart,,fas,14708 +形状,heart crack,heart crack,,fas,14708 +形状,lines leaning,lines leaning,,fas,14708 +形状,location pin,location pin,,fas,14708 +形状,play,play,,fas,14708 +形状,shapes,shapes,,fas,14708 +形状,shield,shield,,fas,14708 +形状,square,square,,far,14708 +形状,square,square,,fas,14708 +形状,star,star,,far,14708 +形状,star,star,,fas,14708 +形状,ticket simple,ticket simple,,fas,14708 +性别,genderless,genderless,,fas,14708 +性别,mars,mars,,fas,14708 +性别,mars and venus,mars and venus,,fas,14708 +性别,mars double,mars double,,fas,14708 +性别,mars stroke,mars stroke,,fas,14708 +性别,mars stroke right,mars stroke right,,fas,14708 +性别,mars stroke up,mars stroke up,,fas,14708 +性别,mercury,mercury,,fas,14708 +性别,neuter,neuter,,fas,14708 +性别,person half dress,person half dress,,fas,14708 +性别,transgender,transgender,,fas,14708 +性别,venus,venus,,fas,14708 +性别,venus double,venus double,,fas,14708 +性别,venus mars,venus mars,,fas,14708 +旋转图标,arrows spin,arrows spin,,fas,14708 +旋转图标,asterisk,asterisk,*,fas,14708 +旋转图标,atom,atom,,fas,14708 +旋转图标,bahai,bahai,,fas,14708 +旋转图标,certificate,certificate,,fas,14708 +旋转图标,circle notch,circle notch,,fas,14708 +旋转图标,compact disc,compact disc,,fas,14708 +旋转图标,compass,compass,,far,14708 +旋转图标,compass,compass,,fas,14708 +旋转图标,crosshairs,crosshairs,,fas,14708 +旋转图标,dharmachakra,dharmachakra,,fas,14708 +旋转图标,fan,fan,,fas,14708 +旋转图标,gear,gear,,fas,14708 +旋转图标,hurricane,hurricane,,fas,14708 +旋转图标,life ring,life ring,,far,14708 +旋转图标,life ring,life ring,,fas,14708 +旋转图标,palette,palette,,fas,14708 +旋转图标,ring,ring,,fas,14708 +旋转图标,rotate,rotate,,fas,14708 +旋转图标,slash,slash,,fas,14708 +旋转图标,snowflake,snowflake,,far,14708 +旋转图标,snowflake,snowflake,,fas,14708 +旋转图标,spinner,spinner,,fas,14708 +旋转图标,stroopwafel,stroopwafel,,fas,14708 +旋转图标,sun,sun,,far,14708 +旋转图标,sun,sun,,fas,14708 +旋转图标,yin yang,yin yang,,fas,14708 +医疗和健康,accessible icon,accessible icon,,fab,14708 +医疗和健康,bacteria,bacteria,,fas,14708 +医疗和健康,bacterium,bacterium,,fas,14708 +医疗和健康,ban smoking,ban smoking,,fas,14708 +医疗和健康,bandage,bandage,,fas,14708 +医疗和健康,bed pulse,bed pulse,,fas,14708 +医疗和健康,biohazard,biohazard,,fas,14708 +医疗和健康,bone,bone,,fas,14708 +医疗和健康,bong,bong,,fas,14708 +医疗和健康,book medical,book medical,,fas,14708 +医疗和健康,brain,brain,,fas,14708 +医疗和健康,briefcase medical,briefcase medical,,fas,14708 +医疗和健康,cannabis,cannabis,,fas,14708 +医疗和健康,capsules,capsules,,fas,14708 +医疗和健康,circle h,circle h,,fas,14708 +医疗和健康,circle radiation,circle radiation,,fas,14708 +医疗和健康,clipboard user,clipboard user,,fas,14708 +医疗和健康,clock rotate left,clock rotate left,,fas,14708 +医疗和健康,comment medical,comment medical,,fas,14708 +医疗和健康,crutch,crutch,,fas,14708 +医疗和健康,disease,disease,,fas,14708 +医疗和健康,dna,dna,,fas,14708 +医疗和健康,eye,eye,,far,14708 +医疗和健康,eye,eye,,fas,14708 +医疗和健康,eye dropper,eye dropper,,fas,14708 +医疗和健康,file medical,file medical,,fas,14708 +医疗和健康,file prescription,file prescription,,fas,14708 +医疗和健康,file waveform,file waveform,,fas,14708 +医疗和健康,fire flame simple,fire flame simple,,fas,14708 +医疗和健康,flask,flask,,fas,14708 +医疗和健康,flask vial,flask vial,,fas,14708 +医疗和健康,hand dots,hand dots,,fas,14708 +医疗和健康,hand holding medical,hand holding medical,,fas,14708 +医疗和健康,head side cough,head side cough,,fas,14708 +医疗和健康,head side cough slash,head side cough slash,,fas,14708 +医疗和健康,head side mask,head side mask,,fas,14708 +医疗和健康,head side virus,head side virus,,fas,14708 +医疗和健康,heart,heart,,far,14708 +医疗和健康,heart,heart,,fas,14708 +医疗和健康,heart circle bolt,heart circle bolt,,fas,14708 +医疗和健康,heart circle check,heart circle check,,fas,14708 +医疗和健康,heart circle exclamation,heart circle exclamation,,fas,14708 +医疗和健康,heart circle minus,heart circle minus,,fas,14708 +医疗和健康,heart circle plus,heart circle plus,,fas,14708 +医疗和健康,heart circle xmark,heart circle xmark,,fas,14708 +医疗和健康,heart pulse,heart pulse,,fas,14708 +医疗和健康,hospital,hospital,,far,14708 +医疗和健康,hospital,hospital,,fas,14708 +医疗和健康,hospital user,hospital user,,fas,14708 +医疗和健康,house chimney medical,house chimney medical,,fas,14708 +医疗和健康,house medical,house medical,,fas,14708 +医疗和健康,house medical circle check,house medical circle check,,fas,14708 +医疗和健康,house medical circle exclamation,house medical circle exclamation,,fas,14708 +医疗和健康,house medical circle xmark,house medical circle xmark,,fas,14708 +医疗和健康,house medical flag,house medical flag,,fas,14708 +医疗和健康,id card clip,id card clip,,fas,14708 +医疗和健康,joint,joint,,fas,14708 +医疗和健康,kit medical,kit medical,,fas,14708 +医疗和健康,laptop medical,laptop medical,,fas,14708 +医疗和健康,lungs,lungs,,fas,14708 +医疗和健康,lungs virus,lungs virus,,fas,14708 +医疗和健康,mask face,mask face,,fas,14708 +医疗和健康,mask ventilator,mask ventilator,,fas,14708 +医疗和健康,microscope,microscope,,fas,14708 +医疗和健康,mortar pestle,mortar pestle,,fas,14708 +医疗和健康,notes medical,notes medical,,fas,14708 +医疗和健康,pager,pager,,fas,14708 +医疗和健康,person breastfeeding,person breastfeeding,,fas,14708 +医疗和健康,person cane,person cane,,fas,14708 +医疗和健康,person dots from line,person dots from line,,fas,14708 +医疗和健康,person half dress,person half dress,,fas,14708 +医疗和健康,pills,pills,,fas,14708 +医疗和健康,plus,plus,+,fas,14708 +医疗和健康,poop,poop,,fas,14708 +医疗和健康,prescription,prescription,,fas,14708 +医疗和健康,prescription bottle,prescription bottle,,fas,14708 +医疗和健康,prescription bottle medical,prescription bottle medical,,fas,14708 +医疗和健康,pump medical,pump medical,,fas,14708 +医疗和健康,radiation,radiation,,fas,14708 +医疗和健康,receipt,receipt,,fas,14708 +医疗和健康,shield virus,shield virus,,fas,14708 +医疗和健康,skull,skull,,fas,14708 +医疗和健康,skull crossbones,skull crossbones,,fas,14708 +医疗和健康,smoking,smoking,,fas,14708 +医疗和健康,square h,square h,,fas,14708 +医疗和健康,square plus,square plus,,far,14708 +医疗和健康,square plus,square plus,,fas,14708 +医疗和健康,square virus,square virus,,fas,14708 +医疗和健康,staff snake,staff snake,,fas,14708 +医疗和健康,star of life,star of life,,fas,14708 +医疗和健康,stethoscope,stethoscope,,fas,14708 +医疗和健康,suitcase medical,suitcase medical,,fas,14708 +医疗和健康,syringe,syringe,,fas,14708 +医疗和健康,tablets,tablets,,fas,14708 +医疗和健康,teeth,teeth,,fas,14708 +医疗和健康,teeth open,teeth open,,fas,14708 +医疗和健康,thermometer,thermometer,,fas,14708 +医疗和健康,tooth,tooth,,fas,14708 +医疗和健康,truck medical,truck medical,,fas,14708 +医疗和健康,user doctor,user doctor,,fas,14708 +医疗和健康,user nurse,user nurse,,fas,14708 +医疗和健康,vial,vial,,fas,14708 +医疗和健康,vial circle check,vial circle check,,fas,14708 +医疗和健康,vial virus,vial virus,,fas,14708 +医疗和健康,vials,vials,,fas,14708 +医疗和健康,virus,virus,,fas,14708 +医疗和健康,virus covid,virus covid,,fas,14708 +医疗和健康,virus covid slash,virus covid slash,,fas,14708 +医疗和健康,virus slash,virus slash,,fas,14708 +医疗和健康,viruses,viruses,,fas,14708 +医疗和健康,weight scale,weight scale,,fas,14708 +医疗和健康,wheelchair,wheelchair,,fas,14708 +医疗和健康,wheelchair move,wheelchair move,,fas,14708 +医疗和健康,x ray,x ray,,fas,14708 +移动,box archive,box archive,,fas,14708 +移动,box open,box open,,fas,14708 +移动,boxes packing,boxes packing,,fas,14708 +移动,caravan,caravan,,fas,14708 +移动,couch,couch,,fas,14708 +移动,dolly,dolly,,fas,14708 +移动,house chimney,house chimney,,fas,14708 +移动,people carry box,people carry box,,fas,14708 +移动,route,route,,fas,14708 +移动,sign hanging,sign hanging,,fas,14708 +移动,suitcase,suitcase,,fas,14708 +移动,tape,tape,,fas,14708 +移动,trailer,trailer,,fas,14708 +移动,truck moving,truck moving,,fas,14708 +移动,truck ramp box,truck ramp box,,fas,14708 +移动,wine glass,wine glass,,fas,14708 +音乐和音频,compact disc,compact disc,,fas,14708 +音乐和音频,drum,drum,,fas,14708 +音乐和音频,drum steelpan,drum steelpan,,fas,14708 +音乐和音频,file audio,file audio,,far,14708 +音乐和音频,file audio,file audio,,fas,14708 +音乐和音频,guitar,guitar,,fas,14708 +音乐和音频,headphones,headphones,,fas,14708 +音乐和音频,headphones simple,headphones simple,,fas,14708 +音乐和音频,microphone,microphone,,fas,14708 +音乐和音频,microphone lines,microphone lines,,fas,14708 +音乐和音频,microphone lines slash,microphone lines slash,,fas,14708 +音乐和音频,microphone slash,microphone slash,,fas,14708 +音乐和音频,music,music,,fas,14708 +音乐和音频,napster,napster,,fab,14708 +音乐和音频,radio,radio,,fas,14708 +音乐和音频,record vinyl,record vinyl,,fas,14708 +音乐和音频,sliders,sliders,,fas,14708 +音乐和音频,soundcloud,soundcloud,,fab,14708 +音乐和音频,spotify,spotify,,fab,14708 +音乐和音频,volume high,volume high,,fas,14708 +音乐和音频,volume low,volume low,,fas,14708 +音乐和音频,volume off,volume off,,fas,14708 +音乐和音频,volume xmark,volume xmark,,fas,14708 +用户和人群,accessible icon,accessible icon,,fab,14708 +用户和人群,address book,address book,,far,14708 +用户和人群,address book,address book,,fas,14708 +用户和人群,address card,address card,,far,14708 +用户和人群,address card,address card,,fas,14708 +用户和人群,arrows down to people,arrows down to people,,fas,14708 +用户和人群,baby,baby,,fas,14708 +用户和人群,bed,bed,,fas,14708 +用户和人群,chalkboard user,chalkboard user,,fas,14708 +用户和人群,child,child,,fas,14708 +用户和人群,child dress,child dress,,fas,14708 +用户和人群,child reaching,child reaching,,fas,14708 +用户和人群,children,children,,fas,14708 +用户和人群,circle user,circle user,,far,14708 +用户和人群,circle user,circle user,,fas,14708 +用户和人群,clipboard user,clipboard user,,fas,14708 +用户和人群,elevator,elevator,,fas,14708 +用户和人群,face frown,face frown,,far,14708 +用户和人群,face frown,face frown,,fas,14708 +用户和人群,face meh,face meh,,far,14708 +用户和人群,face meh,face meh,,fas,14708 +用户和人群,face smile,face smile,,far,14708 +用户和人群,face smile,face smile,,fas,14708 +用户和人群,head side cough,head side cough,,fas,14708 +用户和人群,head side cough slash,head side cough slash,,fas,14708 +用户和人群,head side mask,head side mask,,fas,14708 +用户和人群,head side virus,head side virus,,fas,14708 +用户和人群,hospital user,hospital user,,fas,14708 +用户和人群,hot tub person,hot tub person,,fas,14708 +用户和人群,house chimney user,house chimney user,,fas,14708 +用户和人群,house user,house user,,fas,14708 +用户和人群,id badge,id badge,,far,14708 +用户和人群,id badge,id badge,,fas,14708 +用户和人群,id card,id card,,far,14708 +用户和人群,id card,id card,,fas,14708 +用户和人群,id card clip,id card clip,,fas,14708 +用户和人群,image portrait,image portrait,,fas,14708 +用户和人群,mars and venus burst,mars and venus burst,,fas,14708 +用户和人群,people arrows,people arrows,,fas,14708 +用户和人群,people carry box,people carry box,,fas,14708 +用户和人群,people group,people group,,fas,14708 +用户和人群,people line,people line,,fas,14708 +用户和人群,people pulling,people pulling,,fas,14708 +用户和人群,people robbery,people robbery,,fas,14708 +用户和人群,people roof,people roof,,fas,14708 +用户和人群,person,person,,fas,14708 +用户和人群,person arrow down to line,person arrow down to line,,fas,14708 +用户和人群,person arrow up from line,person arrow up from line,,fas,14708 +用户和人群,person biking,person biking,,fas,14708 +用户和人群,person booth,person booth,,fas,14708 +用户和人群,person breastfeeding,person breastfeeding,,fas,14708 +用户和人群,person burst,person burst,,fas,14708 +用户和人群,person cane,person cane,,fas,14708 +用户和人群,person chalkboard,person chalkboard,,fas,14708 +用户和人群,person circle check,person circle check,,fas,14708 +用户和人群,person circle exclamation,person circle exclamation,,fas,14708 +用户和人群,person circle minus,person circle minus,,fas,14708 +用户和人群,person circle plus,person circle plus,,fas,14708 +用户和人群,person circle question,person circle question,,fas,14708 +用户和人群,person circle xmark,person circle xmark,,fas,14708 +用户和人群,person digging,person digging,,fas,14708 +用户和人群,person dots from line,person dots from line,,fas,14708 +用户和人群,person dress,person dress,,fas,14708 +用户和人群,person dress burst,person dress burst,,fas,14708 +用户和人群,person drowning,person drowning,,fas,14708 +用户和人群,person falling,person falling,,fas,14708 +用户和人群,person falling burst,person falling burst,,fas,14708 +用户和人群,person half dress,person half dress,,fas,14708 +用户和人群,person harassing,person harassing,,fas,14708 +用户和人群,person hiking,person hiking,,fas,14708 +用户和人群,person military pointing,person military pointing,,fas,14708 +用户和人群,person military rifle,person military rifle,,fas,14708 +用户和人群,person military to person,person military to person,,fas,14708 +用户和人群,person praying,person praying,,fas,14708 +用户和人群,person pregnant,person pregnant,,fas,14708 +用户和人群,person rays,person rays,,fas,14708 +用户和人群,person rifle,person rifle,,fas,14708 +用户和人群,person running,person running,,fas,14708 +用户和人群,person shelter,person shelter,,fas,14708 +用户和人群,person skating,person skating,,fas,14708 +用户和人群,person skiing,person skiing,,fas,14708 +用户和人群,person skiing nordic,person skiing nordic,,fas,14708 +用户和人群,person snowboarding,person snowboarding,,fas,14708 +用户和人群,person swimming,person swimming,,fas,14708 +用户和人群,person through window,person through window,,fas,14708 +用户和人群,person walking,person walking,,fas,14708 +用户和人群,person walking arrow loop left,person walking arrow loop left,,fas,14708 +用户和人群,person walking arrow right,person walking arrow right,,fas,14708 +用户和人群,person walking dashed line arrow right,person walking dashed line arrow right,,fas,14708 +用户和人群,person walking luggage,person walking luggage,,fas,14708 +用户和人群,person walking with cane,person walking with cane,,fas,14708 +用户和人群,poo,poo,,fas,14708 +用户和人群,restroom,restroom,,fas,14708 +用户和人群,skull,skull,,fas,14708 +用户和人群,square person confined,square person confined,,fas,14708 +用户和人群,street view,street view,,fas,14708 +用户和人群,user,user,,far,14708 +用户和人群,user,user,,fas,14708 +用户和人群,user astronaut,user astronaut,,fas,14708 +用户和人群,user check,user check,,fas,14708 +用户和人群,user clock,user clock,,fas,14708 +用户和人群,user doctor,user doctor,,fas,14708 +用户和人群,user gear,user gear,,fas,14708 +用户和人群,user graduate,user graduate,,fas,14708 +用户和人群,user group,user group,,fas,14708 +用户和人群,user injured,user injured,,fas,14708 +用户和人群,user large,user large,,fas,14708 +用户和人群,user large slash,user large slash,,fas,14708 +用户和人群,user lock,user lock,,fas,14708 +用户和人群,user minus,user minus,,fas,14708 +用户和人群,user ninja,user ninja,,fas,14708 +用户和人群,user nurse,user nurse,,fas,14708 +用户和人群,user pen,user pen,,fas,14708 +用户和人群,user plus,user plus,,fas,14708 +用户和人群,user secret,user secret,,fas,14708 +用户和人群,user shield,user shield,,fas,14708 +用户和人群,user slash,user slash,,fas,14708 +用户和人群,user tag,user tag,,fas,14708 +用户和人群,user tie,user tie,,fas,14708 +用户和人群,user xmark,user xmark,,fas,14708 +用户和人群,users,users,,fas,14708 +用户和人群,users between lines,users between lines,,fas,14708 +用户和人群,users gear,users gear,,fas,14708 +用户和人群,users line,users line,,fas,14708 +用户和人群,users rays,users rays,,fas,14708 +用户和人群,users rectangle,users rectangle,,fas,14708 +用户和人群,users slash,users slash,,fas,14708 +用户和人群,users viewfinder,users viewfinder,,fas,14708 +用户和人群,wheelchair,wheelchair,,fas,14708 +用户和人群,wheelchair move,wheelchair move,,fas,14708 +游戏,book skull,book skull,,fas,14708 +游戏,chess,chess,,fas,14708 +游戏,chess bishop,chess bishop,,far,14708 +游戏,chess bishop,chess bishop,,fas,14708 +游戏,chess board,chess board,,fas,14708 +游戏,chess king,chess king,,far,14708 +游戏,chess king,chess king,,fas,14708 +游戏,chess knight,chess knight,,far,14708 +游戏,chess knight,chess knight,,fas,14708 +游戏,chess pawn,chess pawn,,far,14708 +游戏,chess pawn,chess pawn,,fas,14708 +游戏,chess queen,chess queen,,far,14708 +游戏,chess queen,chess queen,,fas,14708 +游戏,chess rook,chess rook,,far,14708 +游戏,chess rook,chess rook,,fas,14708 +游戏,critical role,critical role,,fab,14708 +游戏,d and d,d and d,,fab,14708 +游戏,d and d beyond,d and d beyond,,fab,14708 +游戏,diamond,diamond,,fas,14708 +游戏,dice,dice,,fas,14708 +游戏,dice d20,dice d20,,fas,14708 +游戏,dice d6,dice d6,,fas,14708 +游戏,dice five,dice five,,fas,14708 +游戏,dice four,dice four,,fas,14708 +游戏,dice one,dice one,,fas,14708 +游戏,dice six,dice six,,fas,14708 +游戏,dice three,dice three,,fas,14708 +游戏,dice two,dice two,,fas,14708 +游戏,dragon,dragon,,fas,14708 +游戏,dungeon,dungeon,,fas,14708 +游戏,fantasy flight games,fantasy flight games,,fab,14708 +游戏,gamepad,gamepad,,fas,14708 +游戏,ghost,ghost,,fas,14708 +游戏,hand fist,hand fist,,fas,14708 +游戏,hat wizard,hat wizard,,fas,14708 +游戏,headset,headset,,fas,14708 +游戏,heart,heart,,far,14708 +游戏,heart,heart,,fas,14708 +游戏,playstation,playstation,,fab,14708 +游戏,puzzle piece,puzzle piece,,fas,14708 +游戏,ring,ring,,fas,14708 +游戏,scroll,scroll,,fas,14708 +游戏,shield halved,shield halved,,fas,14708 +游戏,skull crossbones,skull crossbones,,fas,14708 +游戏,square full,square full,,far,14708 +游戏,square full,square full,,fas,14708 +游戏,square steam,square steam,,fab,14708 +游戏,steam,steam,,fab,14708 +游戏,steam symbol,steam symbol,,fab,14708 +游戏,twitch,twitch,,fab,14708 +游戏,vr cardboard,vr cardboard,,fas,14708 +游戏,wand sparkles,wand sparkles,,fas,14708 +游戏,wizards of the coast,wizards of the coast,,fab,14708 +游戏,xbox,xbox,,fab,14708 +运动和健身,baseball,baseball,,fas,14708 +运动和健身,baseball bat ball,baseball bat ball,,fas,14708 +运动和健身,basketball,basketball,,fas,14708 +运动和健身,bicycle,bicycle,,fas,14708 +运动和健身,bowling ball,bowling ball,,fas,14708 +运动和健身,broom ball,broom ball,,fas,14708 +运动和健身,dumbbell,dumbbell,,fas,14708 +运动和健身,fire flame curved,fire flame curved,,fas,14708 +运动和健身,fire flame simple,fire flame simple,,fas,14708 +运动和健身,football,football,,fas,14708 +运动和健身,futbol,futbol,,far,14708 +运动和健身,futbol,futbol,,fas,14708 +运动和健身,golf ball tee,golf ball tee,,fas,14708 +运动和健身,heart,heart,,far,14708 +运动和健身,heart,heart,,fas,14708 +运动和健身,heart pulse,heart pulse,,fas,14708 +运动和健身,hockey puck,hockey puck,,fas,14708 +运动和健身,medal,medal,,fas,14708 +运动和健身,mound,mound,,fas,14708 +运动和健身,person biking,person biking,,fas,14708 +运动和健身,person hiking,person hiking,,fas,14708 +运动和健身,person running,person running,,fas,14708 +运动和健身,person skating,person skating,,fas,14708 +运动和健身,person skiing,person skiing,,fas,14708 +运动和健身,person skiing nordic,person skiing nordic,,fas,14708 +运动和健身,person snowboarding,person snowboarding,,fas,14708 +运动和健身,person swimming,person swimming,,fas,14708 +运动和健身,person walking,person walking,,fas,14708 +运动和健身,ranking star,ranking star,,fas,14708 +运动和健身,shoe prints,shoe prints,,fas,14708 +运动和健身,spa,spa,,fas,14708 +运动和健身,stopwatch 20,stopwatch 20,,fas,14708 +运动和健身,table tennis paddle ball,table tennis paddle ball,,fas,14708 +运动和健身,volleyball,volleyball,,fas,14708 +运动和健身,weight hanging,weight hanging,,fas,14708 +灾难和危机,biohazard,biohazard,,fas,14708 +灾难和危机,bugs,bugs,,fas,14708 +灾难和危机,burst,burst,,fas,14708 +灾难和危机,child combatant,child combatant,,fas,14708 +灾难和危机,circle radiation,circle radiation,,fas,14708 +灾难和危机,cloud bolt,cloud bolt,,fas,14708 +灾难和危机,cloud showers heavy,cloud showers heavy,,fas,14708 +灾难和危机,cloud showers water,cloud showers water,,fas,14708 +灾难和危机,helmet un,helmet un,,fas,14708 +灾难和危机,hill avalanche,hill avalanche,,fas,14708 +灾难和危机,hill rockslide,hill rockslide,,fas,14708 +灾难和危机,house chimney crack,house chimney crack,,fas,14708 +灾难和危机,house crack,house crack,,fas,14708 +灾难和危机,house fire,house fire,,fas,14708 +灾难和危机,house flood water,house flood water,,fas,14708 +灾难和危机,house flood water circle arrow right,house flood water circle arrow right,,fas,14708 +灾难和危机,house tsunami,house tsunami,,fas,14708 +灾难和危机,hurricane,hurricane,,fas,14708 +灾难和危机,locust,locust,,fas,14708 +灾难和危机,mosquito,mosquito,,fas,14708 +灾难和危机,person drowning,person drowning,,fas,14708 +灾难和危机,person rifle,person rifle,,fas,14708 +灾难和危机,person walking arrow loop left,person walking arrow loop left,,fas,14708 +灾难和危机,person walking arrow right,person walking arrow right,,fas,14708 +灾难和危机,person walking dashed line arrow right,person walking dashed line arrow right,,fas,14708 +灾难和危机,plant wilt,plant wilt,,fas,14708 +灾难和危机,radiation,radiation,,fas,14708 +灾难和危机,snowflake,snowflake,,far,14708 +灾难和危机,snowflake,snowflake,,fas,14708 +灾难和危机,sun plant wilt,sun plant wilt,,fas,14708 +灾难和危机,temperature arrow down,temperature arrow down,,fas,14708 +灾难和危机,temperature arrow up,temperature arrow up,,fas,14708 +灾难和危机,tornado,tornado,,fas,14708 +灾难和危机,volcano,volcano,,fas,14708 +灾难和危机,wheat awn circle exclamation,wheat awn circle exclamation,,fas,14708 +灾难和危机,wind,wind,,fas,14708 +灾难和危机,worm,worm,,fas,14708 +灾难和危机,xmarks lines,xmarks lines,,fas,14708 +照片和图片,bolt,bolt,,fas,14708 +照片和图片,bolt lightning,bolt lightning,,fas,14708 +照片和图片,camera,camera,,fas,14708 +照片和图片,camera retro,camera retro,,fas,14708 +照片和图片,camera rotate,camera rotate,,fas,14708 +照片和图片,chalkboard,chalkboard,,fas,14708 +照片和图片,circle half stroke,circle half stroke,,fas,14708 +照片和图片,clone,clone,,far,14708 +照片和图片,clone,clone,,fas,14708 +照片和图片,droplet,droplet,,fas,14708 +照片和图片,eye,eye,,far,14708 +照片和图片,eye,eye,,fas,14708 +照片和图片,eye dropper,eye dropper,,fas,14708 +照片和图片,eye slash,eye slash,,far,14708 +照片和图片,eye slash,eye slash,,fas,14708 +照片和图片,file image,file image,,far,14708 +照片和图片,file image,file image,,fas,14708 +照片和图片,film,film,,fas,14708 +照片和图片,id badge,id badge,,far,14708 +照片和图片,id badge,id badge,,fas,14708 +照片和图片,id card,id card,,far,14708 +照片和图片,id card,id card,,fas,14708 +照片和图片,image,image,,far,14708 +照片和图片,image,image,,fas,14708 +照片和图片,image portrait,image portrait,,fas,14708 +照片和图片,images,images,,far,14708 +照片和图片,images,images,,fas,14708 +照片和图片,minimize,minimize,,fas,14708 +照片和图片,panorama,panorama,,fas,14708 +照片和图片,photo film,photo film,,fas,14708 +照片和图片,sliders,sliders,,fas,14708 +照片和图片,unsplash,unsplash,,fab,14708 +政治,award,award,,fas,14708 +政治,building flag,building flag,,fas,14708 +政治,bullhorn,bullhorn,,fas,14708 +政治,check double,check double,,fas,14708 +政治,check to slot,check to slot,,fas,14708 +政治,circle dollar to slot,circle dollar to slot,,fas,14708 +政治,democrat,democrat,,fas,14708 +政治,dove,dove,,fas,14708 +政治,dumpster fire,dumpster fire,,fas,14708 +政治,flag usa,flag usa,,fas,14708 +政治,hand fist,hand fist,,fas,14708 +政治,handshake,handshake,,far,14708 +政治,handshake,handshake,,fas,14708 +政治,landmark dome,landmark dome,,fas,14708 +政治,landmark flag,landmark flag,,fas,14708 +政治,person booth,person booth,,fas,14708 +政治,piggy bank,piggy bank,,fas,14708 +政治,republican,republican,,fas,14708 +政治,scale balanced,scale balanced,,fas,14708 +政治,scale unbalanced,scale unbalanced,,fas,14708 +政治,scale unbalanced flip,scale unbalanced flip,,fas,14708 +字母,a,a,A,fas,14708 +字母,b,b,B,fas,14708 +字母,c,c,C,fas,14708 +字母,circle h,circle h,,fas,14708 +字母,d,d,D,fas,14708 +字母,e,e,E,fas,14708 +字母,f,f,F,fas,14708 +字母,g,g,G,fas,14708 +字母,h,h,H,fas,14708 +字母,i,i,I,fas,14708 +字母,j,j,J,fas,14708 +字母,k,k,K,fas,14708 +字母,l,l,L,fas,14708 +字母,m,m,M,fas,14708 +字母,n,n,N,fas,14708 +字母,o,o,O,fas,14708 +字母,p,p,P,fas,14708 +字母,q,q,Q,fas,14708 +字母,r,r,R,fas,14708 +字母,s,s,S,fas,14708 +字母,square h,square h,,fas,14708 +字母,t,t,T,fas,14708 +字母,u,u,U,fas,14708 +字母,v,v,V,fas,14708 +字母,w,w,W,fas,14708 +字母,x,x,X,fas,14708 +字母,y,y,Y,fas,14708 +字母,z,z,Z,fas,14708 +自然,binoculars,binoculars,,fas,14708 +自然,bug,bug,,fas,14708 +自然,bugs,bugs,,fas,14708 +自然,cannabis,cannabis,,fas,14708 +自然,cloud sun,cloud sun,,fas,14708 +自然,clover,clover,,fas,14708 +自然,feather,feather,,fas,14708 +自然,feather pointed,feather pointed,,fas,14708 +自然,fire,fire,,fas,14708 +自然,frog,frog,,fas,14708 +自然,icicles,icicles,,fas,14708 +自然,leaf,leaf,,fas,14708 +自然,locust,locust,,fas,14708 +自然,mosquito,mosquito,,fas,14708 +自然,mound,mound,,fas,14708 +自然,mountain,mountain,,fas,14708 +自然,mountain city,mountain city,,fas,14708 +自然,mountain sun,mountain sun,,fas,14708 +自然,person hiking,person hiking,,fas,14708 +自然,plant wilt,plant wilt,,fas,14708 +自然,seedling,seedling,,fas,14708 +自然,signs post,signs post,,fas,14708 +自然,spider,spider,,fas,14708 +自然,tree,tree,,fas,14708 +自然,volcano,volcano,,fas,14708 +自然,water,water,,fas,14708 +自然,wind,wind,,fas,14708 +自然,worm,worm,,fas,14708 +宗教,ankh,ankh,,fas,14708 +宗教,atom,atom,,fas,14708 +宗教,bahai,bahai,,fas,14708 +宗教,book bible,book bible,,fas,14708 +宗教,book journal whills,book journal whills,,fas,14708 +宗教,book quran,book quran,,fas,14708 +宗教,book tanakh,book tanakh,,fas,14708 +宗教,church,church,,fas,14708 +宗教,cross,cross,,fas,14708 +宗教,dharmachakra,dharmachakra,,fas,14708 +宗教,dove,dove,,fas,14708 +宗教,gopuram,gopuram,,fas,14708 +宗教,hamsa,hamsa,,fas,14708 +宗教,hands praying,hands praying,,fas,14708 +宗教,hanukiah,hanukiah,,fas,14708 +宗教,jedi,jedi,,fas,14708 +宗教,kaaba,kaaba,,fas,14708 +宗教,khanda,khanda,,fas,14708 +宗教,menorah,menorah,,fas,14708 +宗教,mosque,mosque,,fas,14708 +宗教,om,om,,fas,14708 +宗教,peace,peace,,fas,14708 +宗教,person praying,person praying,,fas,14708 +宗教,place of worship,place of worship,,fas,14708 +宗教,scroll torah,scroll torah,,fas,14708 +宗教,spaghetti monster flying,spaghetti monster flying,,fas,14708 +宗教,star and crescent,star and crescent,,fas,14708 +宗教,star of david,star of david,,fas,14708 +宗教,synagogue,synagogue,,fas,14708 +宗教,torii gate,torii gate,,fas,14708 +宗教,vihara,vihara,,fas,14708 +宗教,yin yang,yin yang,,fas,14708 \ No newline at end of file diff --git a/design/design/icon/wolai-icon-picker-fontawesome.json b/design/design/icon/wolai-icon-picker-fontawesome.json new file mode 100644 index 00000000..d884ce11 --- /dev/null +++ b/design/design/icon/wolai-icon-picker-fontawesome.json @@ -0,0 +1,28490 @@ +{ + "sourceUrl": "https://www.wolai.com/liaibo/ikFSSM1a4GgvmHBYFCNfVd", + "capturedAt": "2026-04-30T12:51:41.617Z", + "trigger": "#tree-icon-2VFCiqksF432eZdhqfYZ69", + "panel": "modal-dialog-wrapper icon-menu-wrapper / #emoji-container / #font-container", + "notes": [ + "页面树图标点击可打开图标选择器,URL 不变化。", + "Font Awesome 图标以 i.fas / i.far / i.fab 渲染,aria-label 提供英文名称,文本节点是字体 glyph。", + "Emoji tab、Font tab 初始截图已保存;若抓到“商务”分类,会额外保存 business 截图。" + ], + "categoryCount": 66, + "iconCount": 3091, + "hasBusinessCategory": true, + "categories": [ + { + "name": "警示", + "firstScrollTop": 0, + "maxItemCount": 11 + }, + { + "name": "无障碍", + "firstScrollTop": 0, + "maxItemCount": 25 + }, + { + "name": "字母", + "firstScrollTop": 0, + "maxItemCount": 28 + }, + { + "name": "动物", + "firstScrollTop": 156, + "maxItemCount": 25 + }, + { + "name": "箭头", + "firstScrollTop": 156, + "maxItemCount": 128 + }, + { + "name": "天文学", + "firstScrollTop": 156, + "maxItemCount": 8 + }, + { + "name": "建筑物", + "firstScrollTop": 942, + "maxItemCount": 76 + }, + { + "name": "汽车", + "firstScrollTop": 942, + "maxItemCount": 28 + }, + { + "name": "商务", + "firstScrollTop": 942, + "maxItemCount": 116 + }, + { + "name": "慈善", + "firstScrollTop": 1980, + "maxItemCount": 22 + }, + { + "name": "露营", + "firstScrollTop": 1980, + "maxItemCount": 39 + }, + { + "name": "图表", + "firstScrollTop": 1980, + "maxItemCount": 16 + }, + { + "name": "代码", + "firstScrollTop": 2442, + "maxItemCount": 55 + }, + { + "name": "服装", + "firstScrollTop": 2442, + "maxItemCount": 12 + }, + { + "name": "童年", + "firstScrollTop": 2442, + "maxItemCount": 25 + }, + { + "name": "建筑施工", + "firstScrollTop": 2976, + "maxItemCount": 30 + }, + { + "name": "连通性", + "firstScrollTop": 2976, + "maxItemCount": 14 + }, + { + "name": "通讯", + "firstScrollTop": 2976, + "maxItemCount": 64 + }, + { + "name": "设备和硬件", + "firstScrollTop": 3582, + "maxItemCount": 46 + }, + { + "name": "设计", + "firstScrollTop": 3582, + "maxItemCount": 64 + }, + { + "name": "灾难和危机", + "firstScrollTop": 3582, + "maxItemCount": 38 + }, + { + "name": "编辑器", + "firstScrollTop": 4368, + "maxItemCount": 52 + }, + { + "name": "表情", + "firstScrollTop": 4368, + "maxItemCount": 72 + }, + { + "name": "教育", + "firstScrollTop": 4368, + "maxItemCount": 26 + }, + { + "name": "电影和视频", + "firstScrollTop": 5082, + "maxItemCount": 27 + }, + { + "name": "能源", + "firstScrollTop": 5082, + "maxItemCount": 39 + }, + { + "name": "文件", + "firstScrollTop": 5082, + "maxItemCount": 54 + }, + { + "name": "食物和饮料", + "firstScrollTop": 5688, + "maxItemCount": 49 + }, + { + "name": "水果和蔬菜", + "firstScrollTop": 5688, + "maxItemCount": 7 + }, + { + "name": "游戏", + "firstScrollTop": 5688, + "maxItemCount": 54 + }, + { + "name": "手", + "firstScrollTop": 6258, + "maxItemCount": 49 + }, + { + "name": "万圣节", + "firstScrollTop": 6258, + "maxItemCount": 13 + }, + { + "name": "性别", + "firstScrollTop": 6258, + "maxItemCount": 14 + }, + { + "name": "家庭", + "firstScrollTop": 6720, + "maxItemCount": 51 + }, + { + "name": "假日", + "firstScrollTop": 6720, + "maxItemCount": 17 + }, + { + "name": "人文", + "firstScrollTop": 6720, + "maxItemCount": 343 + }, + { + "name": "地图", + "firstScrollTop": 8514, + "maxItemCount": 154 + }, + { + "name": "航海", + "firstScrollTop": 8514, + "maxItemCount": 14 + }, + { + "name": "后勤和物流", + "firstScrollTop": 8514, + "maxItemCount": 56 + }, + { + "name": "媒体播放", + "firstScrollTop": 9588, + "maxItemCount": 41 + }, + { + "name": "市场营销", + "firstScrollTop": 9588, + "maxItemCount": 25 + }, + { + "name": "数学计算", + "firstScrollTop": 9588, + "maxItemCount": 25 + }, + { + "name": "金钱", + "firstScrollTop": 10086, + "maxItemCount": 75 + }, + { + "name": "医疗和健康", + "firstScrollTop": 10086, + "maxItemCount": 114 + }, + { + "name": "移动", + "firstScrollTop": 10086, + "maxItemCount": 16 + }, + { + "name": "数字", + "firstScrollTop": 11052, + "maxItemCount": 10 + }, + { + "name": "音乐和音频", + "firstScrollTop": 11052, + "maxItemCount": 23 + }, + { + "name": "自然", + "firstScrollTop": 11052, + "maxItemCount": 28 + }, + { + "name": "标点与符号", + "firstScrollTop": 11468, + "maxItemCount": 19 + }, + { + "name": "照片和图片", + "firstScrollTop": 11468, + "maxItemCount": 32 + }, + { + "name": "政治", + "firstScrollTop": 11468, + "maxItemCount": 21 + }, + { + "name": "科幻小说", + "firstScrollTop": 11940, + "maxItemCount": 14 + }, + { + "name": "科学", + "firstScrollTop": 11940, + "maxItemCount": 33 + }, + { + "name": "宗教", + "firstScrollTop": 11940, + "maxItemCount": 32 + }, + { + "name": "安全", + "firstScrollTop": 12402, + "maxItemCount": 65 + }, + { + "name": "购物", + "firstScrollTop": 12402, + "maxItemCount": 70 + }, + { + "name": "形状", + "firstScrollTop": 12402, + "maxItemCount": 33 + }, + { + "name": "社交", + "firstScrollTop": 13224, + "maxItemCount": 44 + }, + { + "name": "旋转图标", + "firstScrollTop": 13224, + "maxItemCount": 27 + }, + { + "name": "运动和健身", + "firstScrollTop": 13224, + "maxItemCount": 35 + }, + { + "name": "切换", + "firstScrollTop": 13758, + "maxItemCount": 21 + }, + { + "name": "时间", + "firstScrollTop": 13758, + "maxItemCount": 28 + }, + { + "name": "文本格式", + "firstScrollTop": 13758, + "maxItemCount": 43 + }, + { + "name": "交通运输", + "firstScrollTop": 14292, + "maxItemCount": 51 + }, + { + "name": "旅行和酒店", + "firstScrollTop": 14292, + "maxItemCount": 75 + }, + { + "name": "用户和人群", + "firstScrollTop": 14292, + "maxItemCount": 130 + } + ], + "icons": [ + { + "category": "安全", + "name": "ban", + "aria": "ban", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "bug", + "aria": "bug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "bug slash", + "aria": "bug slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "building lock", + "aria": "building lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "building shield", + "aria": "building shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "burst", + "aria": "burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "car on", + "aria": "car on", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "door closed", + "aria": "door closed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "door open", + "aria": "door open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "dungeon", + "aria": "dungeon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "explosion", + "aria": "explosion", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "file contract", + "aria": "file contract", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "file shield", + "aria": "file shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "file signature", + "aria": "file signature", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "fingerprint", + "aria": "fingerprint", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "gun", + "aria": "gun", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "handcuffs", + "aria": "handcuffs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "hands bound", + "aria": "hands bound", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "hands holding child", + "aria": "hands holding child", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "hands holding circle", + "aria": "hands holding circle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "house fire", + "aria": "house fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "house lock", + "aria": "house lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "id badge", + "aria": "id badge", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "id badge", + "aria": "id badge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "id card", + "aria": "id card", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "id card", + "aria": "id card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "id card clip", + "aria": "id card clip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "key", + "aria": "key", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "land mine on", + "aria": "land mine on", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "lock", + "aria": "lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "lock open", + "aria": "lock open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "mars and venus burst", + "aria": "mars and venus burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "mask", + "aria": "mask", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "passport", + "aria": "passport", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "people pulling", + "aria": "people pulling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "people robbery", + "aria": "people robbery", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person burst", + "aria": "person burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person dress burst", + "aria": "person dress burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person falling burst", + "aria": "person falling burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person harassing", + "aria": "person harassing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person military pointing", + "aria": "person military pointing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person military rifle", + "aria": "person military rifle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person military to person", + "aria": "person military to person", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person rifle", + "aria": "person rifle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person shelter", + "aria": "person shelter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "person through window", + "aria": "person through window", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "road spikes", + "aria": "road spikes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "shield", + "aria": "shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "shield cat", + "aria": "shield cat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "shield dog", + "aria": "shield dog", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "shield halved", + "aria": "shield halved", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "shield heart", + "aria": "shield heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "skull crossbones", + "aria": "skull crossbones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "square person confined", + "aria": "square person confined", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "tower observation", + "aria": "tower observation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "unlock", + "aria": "unlock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "unlock keyhole", + "aria": "unlock keyhole", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "user lock", + "aria": "user lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "user secret", + "aria": "user secret", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "user shield", + "aria": "user shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "安全", + "name": "vault", + "aria": "vault", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "arrows rotate", + "aria": "arrows rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "bandage", + "aria": "bandage", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "bars", + "aria": "bars", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "brush", + "aria": "brush", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "chart simple", + "aria": "chart simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "check", + "aria": "check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "check double", + "aria": "check double", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "circle check", + "aria": "circle check", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "circle check", + "aria": "circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "circle half stroke", + "aria": "circle half stroke", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "crop", + "aria": "crop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "crop simple", + "aria": "crop simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "cube", + "aria": "cube", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "delete left", + "aria": "delete left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "drag handle", + "aria": "drag handle", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "ellipsis", + "aria": "ellipsis", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "ellipsis vertical", + "aria": "ellipsis vertical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "eye dropper", + "aria": "eye dropper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "grip", + "aria": "grip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "grip lines", + "aria": "grip lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "grip lines vertical", + "aria": "grip lines vertical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "grip vertical", + "aria": "grip vertical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "link", + "aria": "link", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "link slash", + "aria": "link slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "minus", + "aria": "minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "paintbrush", + "aria": "paintbrush", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "pen", + "aria": "pen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "pen clip", + "aria": "pen clip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "pen fancy", + "aria": "pen fancy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "pen nib", + "aria": "pen nib", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "pen ruler", + "aria": "pen ruler", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "pen to square", + "aria": "pen to square", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "pen to square", + "aria": "pen to square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "pencil", + "aria": "pencil", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "plus", + "aria": "plus", + "glyph": "+", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "rotate", + "aria": "rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "scissors", + "aria": "scissors", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "signature", + "aria": "signature", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "sliders", + "aria": "sliders", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "square check", + "aria": "square check", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "square check", + "aria": "square check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "square pen", + "aria": "square pen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "trash", + "aria": "trash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "trash arrow up", + "aria": "trash arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "trash can", + "aria": "trash can", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "trash can", + "aria": "trash can", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "trash can arrow up", + "aria": "trash can arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "wand magic", + "aria": "wand magic", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "wand magic sparkles", + "aria": "wand magic sparkles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "编辑器", + "name": "xmark", + "aria": "xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "asterisk", + "aria": "asterisk", + "glyph": "*", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "at", + "aria": "at", + "glyph": "@", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "check", + "aria": "check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "check double", + "aria": "check double", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "circle exclamation", + "aria": "circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "circle question", + "aria": "circle question", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "circle question", + "aria": "circle question", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "equals", + "aria": "equals", + "glyph": "=", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "exclamation", + "aria": "exclamation", + "glyph": "!", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "greater than", + "aria": "greater than", + "glyph": ">", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "hashtag", + "aria": "hashtag", + "glyph": "#", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "less than", + "aria": "less than", + "glyph": "<", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "minus", + "aria": "minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "percent", + "aria": "percent", + "glyph": "%", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "plus", + "aria": "plus", + "glyph": "+", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "question", + "aria": "question", + "glyph": "?", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "quote left", + "aria": "quote left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "quote right", + "aria": "quote right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "标点与符号", + "name": "section", + "aria": "section", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face angry", + "aria": "face angry", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face angry", + "aria": "face angry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face dizzy", + "aria": "face dizzy", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face dizzy", + "aria": "face dizzy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face flushed", + "aria": "face flushed", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face flushed", + "aria": "face flushed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face frown", + "aria": "face frown", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face frown", + "aria": "face frown", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face frown open", + "aria": "face frown open", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face frown open", + "aria": "face frown open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grimace", + "aria": "face grimace", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grimace", + "aria": "face grimace", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin", + "aria": "face grin", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin", + "aria": "face grin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin beam", + "aria": "face grin beam", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin beam", + "aria": "face grin beam", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin beam sweat", + "aria": "face grin beam sweat", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin beam sweat", + "aria": "face grin beam sweat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin hearts", + "aria": "face grin hearts", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin hearts", + "aria": "face grin hearts", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin squint", + "aria": "face grin squint", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin squint", + "aria": "face grin squint", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin squint tears", + "aria": "face grin squint tears", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin squint tears", + "aria": "face grin squint tears", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin stars", + "aria": "face grin stars", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin stars", + "aria": "face grin stars", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin tears", + "aria": "face grin tears", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin tears", + "aria": "face grin tears", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin tongue", + "aria": "face grin tongue", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin tongue", + "aria": "face grin tongue", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin tongue squint", + "aria": "face grin tongue squint", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin tongue squint", + "aria": "face grin tongue squint", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin tongue wink", + "aria": "face grin tongue wink", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin tongue wink", + "aria": "face grin tongue wink", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin wide", + "aria": "face grin wide", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin wide", + "aria": "face grin wide", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin wink", + "aria": "face grin wink", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face grin wink", + "aria": "face grin wink", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face kiss", + "aria": "face kiss", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face kiss", + "aria": "face kiss", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face kiss beam", + "aria": "face kiss beam", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face kiss beam", + "aria": "face kiss beam", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face kiss wink heart", + "aria": "face kiss wink heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face kiss wink heart", + "aria": "face kiss wink heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face laugh", + "aria": "face laugh", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face laugh", + "aria": "face laugh", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face laugh beam", + "aria": "face laugh beam", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face laugh beam", + "aria": "face laugh beam", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face laugh squint", + "aria": "face laugh squint", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face laugh squint", + "aria": "face laugh squint", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face laugh wink", + "aria": "face laugh wink", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face laugh wink", + "aria": "face laugh wink", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face meh", + "aria": "face meh", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face meh", + "aria": "face meh", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face meh blank", + "aria": "face meh blank", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face meh blank", + "aria": "face meh blank", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face rolling eyes", + "aria": "face rolling eyes", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face rolling eyes", + "aria": "face rolling eyes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face sad cry", + "aria": "face sad cry", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face sad cry", + "aria": "face sad cry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face sad tear", + "aria": "face sad tear", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face sad tear", + "aria": "face sad tear", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face smile", + "aria": "face smile", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face smile", + "aria": "face smile", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face smile beam", + "aria": "face smile beam", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face smile beam", + "aria": "face smile beam", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face smile wink", + "aria": "face smile wink", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face smile wink", + "aria": "face smile wink", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face surprise", + "aria": "face surprise", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face surprise", + "aria": "face surprise", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face tired", + "aria": "face tired", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "表情", + "name": "face tired", + "aria": "face tired", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "circle dollar to slot", + "aria": "circle dollar to slot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "dollar sign", + "aria": "dollar sign", + "glyph": "$", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "dove", + "aria": "dove", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "gift", + "aria": "gift", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "globe", + "aria": "globe", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "hand holding dollar", + "aria": "hand holding dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "hand holding droplet", + "aria": "hand holding droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "hand holding hand", + "aria": "hand holding hand", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "hand holding heart", + "aria": "hand holding heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "hands holding child", + "aria": "hands holding child", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "hands holding circle", + "aria": "hands holding circle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "handshake", + "aria": "handshake", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "handshake", + "aria": "handshake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "handshake angle", + "aria": "handshake angle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "handshake simple", + "aria": "handshake simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "leaf", + "aria": "leaf", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "parachute box", + "aria": "parachute box", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "piggy bank", + "aria": "piggy bank", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "ribbon", + "aria": "ribbon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "慈善", + "name": "seedling", + "aria": "seedling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "barcode", + "aria": "barcode", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "bars", + "aria": "bars", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "bars staggered", + "aria": "bars staggered", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "bath", + "aria": "bath", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "box archive", + "aria": "box archive", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "bug", + "aria": "bug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "bug slash", + "aria": "bug slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "circle nodes", + "aria": "circle nodes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "code", + "aria": "code", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "code branch", + "aria": "code branch", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "code commit", + "aria": "code commit", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "code compare", + "aria": "code compare", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "code fork", + "aria": "code fork", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "code merge", + "aria": "code merge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "code pull request", + "aria": "code pull request", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "cube", + "aria": "cube", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "cubes", + "aria": "cubes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "diagram project", + "aria": "diagram project", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "file", + "aria": "file", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "file", + "aria": "file", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "file code", + "aria": "file code", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "file code", + "aria": "file code", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "file lines", + "aria": "file lines", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "file lines", + "aria": "file lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "filter", + "aria": "filter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "fire extinguisher", + "aria": "fire extinguisher", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "folder", + "aria": "folder", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "folder", + "aria": "folder", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "folder open", + "aria": "folder open", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "folder open", + "aria": "folder open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "font awesome", + "aria": "font awesome", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "font awesome", + "aria": "font awesome", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "font awesome", + "aria": "font awesome", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "gears", + "aria": "gears", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "keyboard", + "aria": "keyboard", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "keyboard", + "aria": "keyboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "laptop code", + "aria": "laptop code", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "microchip", + "aria": "microchip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "mug saucer", + "aria": "mug saucer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "network wired", + "aria": "network wired", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "notdef", + "aria": "notdef", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "qrcode", + "aria": "qrcode", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "rectangle xmark", + "aria": "rectangle xmark", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "rectangle xmark", + "aria": "rectangle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "shield", + "aria": "shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "shield halved", + "aria": "shield halved", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "sitemap", + "aria": "sitemap", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "terminal", + "aria": "terminal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "user secret", + "aria": "user secret", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "window maximize", + "aria": "window maximize", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "window maximize", + "aria": "window maximize", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "window minimize", + "aria": "window minimize", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "window minimize", + "aria": "window minimize", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "window restore", + "aria": "window restore", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "代码", + "name": "window restore", + "aria": "window restore", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "anchor", + "aria": "anchor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bag shopping", + "aria": "bag shopping", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "basket shopping", + "aria": "basket shopping", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bath", + "aria": "bath", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bed", + "aria": "bed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "beer mug empty", + "aria": "beer mug empty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bell slash", + "aria": "bell slash", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bell slash", + "aria": "bell slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bicycle", + "aria": "bicycle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "binoculars", + "aria": "binoculars", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bomb", + "aria": "bomb", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "book", + "aria": "book", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "book atlas", + "aria": "book atlas", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bookmark", + "aria": "bookmark", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bookmark", + "aria": "bookmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bridge", + "aria": "bridge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "bridge water", + "aria": "bridge water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "briefcase", + "aria": "briefcase", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "building", + "aria": "building", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "building", + "aria": "building", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "building columns", + "aria": "building columns", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "cake candles", + "aria": "cake candles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "car", + "aria": "car", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "cart shopping", + "aria": "cart shopping", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "circle info", + "aria": "circle info", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "crosshairs", + "aria": "crosshairs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "diamond turn right", + "aria": "diamond turn right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "dollar sign", + "aria": "dollar sign", + "glyph": "$", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "draw polygon", + "aria": "draw polygon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "droplet", + "aria": "droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "eye low vision", + "aria": "eye low vision", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "fire", + "aria": "fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "fire extinguisher", + "aria": "fire extinguisher", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "fire flame curved", + "aria": "fire flame curved", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "flag", + "aria": "flag", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "flag", + "aria": "flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "flag checkered", + "aria": "flag checkered", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "flask", + "aria": "flask", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "gamepad", + "aria": "gamepad", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "gavel", + "aria": "gavel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "gift", + "aria": "gift", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "globe", + "aria": "globe", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "graduation cap", + "aria": "graduation cap", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "heart pulse", + "aria": "heart pulse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "helicopter", + "aria": "helicopter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "helicopter symbol", + "aria": "helicopter symbol", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "hospital", + "aria": "hospital", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "hospital", + "aria": "hospital", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "house", + "aria": "house", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "image", + "aria": "image", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "image", + "aria": "image", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "images", + "aria": "images", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "images", + "aria": "images", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "industry", + "aria": "industry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "info", + "aria": "info", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "jet fighter", + "aria": "jet fighter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "key", + "aria": "key", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "landmark", + "aria": "landmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "landmark flag", + "aria": "landmark flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "layer group", + "aria": "layer group", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "leaf", + "aria": "leaf", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "lemon", + "aria": "lemon", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "lemon", + "aria": "lemon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "life ring", + "aria": "life ring", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "life ring", + "aria": "life ring", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "lightbulb", + "aria": "lightbulb", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "lightbulb", + "aria": "lightbulb", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "location arrow", + "aria": "location arrow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "location crosshairs", + "aria": "location crosshairs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "location dot", + "aria": "location dot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "location pin", + "aria": "location pin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "location pin lock", + "aria": "location pin lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "magnet", + "aria": "magnet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "magnifying glass", + "aria": "magnifying glass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "magnifying glass minus", + "aria": "magnifying glass minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "magnifying glass plus", + "aria": "magnifying glass plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "map", + "aria": "map", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "map", + "aria": "map", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "map pin", + "aria": "map pin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "martini glass empty", + "aria": "martini glass empty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "money bill", + "aria": "money bill", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "money bill 1", + "aria": "money bill 1", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "money bill 1", + "aria": "money bill 1", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "motorcycle", + "aria": "motorcycle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "mountain sun", + "aria": "mountain sun", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "mug saucer", + "aria": "mug saucer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "music", + "aria": "music", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "newspaper", + "aria": "newspaper", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "newspaper", + "aria": "newspaper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "paw", + "aria": "paw", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "person", + "aria": "person", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "person walking with cane", + "aria": "person walking with cane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "phone", + "aria": "phone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "phone flip", + "aria": "phone flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "phone volume", + "aria": "phone volume", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "plane", + "aria": "plane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "plug", + "aria": "plug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "plus", + "aria": "plus", + "glyph": "+", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "print", + "aria": "print", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "recycle", + "aria": "recycle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "restroom", + "aria": "restroom", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "road", + "aria": "road", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "rocket", + "aria": "rocket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "route", + "aria": "route", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "scale balanced", + "aria": "scale balanced", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "scale unbalanced", + "aria": "scale unbalanced", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "scale unbalanced flip", + "aria": "scale unbalanced flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "ship", + "aria": "ship", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "shoe prints", + "aria": "shoe prints", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "shower", + "aria": "shower", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "signs post", + "aria": "signs post", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "snowplow", + "aria": "snowplow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "spoon", + "aria": "spoon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "square h", + "aria": "square h", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "square parking", + "aria": "square parking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "square phone", + "aria": "square phone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "square phone flip", + "aria": "square phone flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "square plus", + "aria": "square plus", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "square plus", + "aria": "square plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "street view", + "aria": "street view", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "suitcase", + "aria": "suitcase", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "suitcase medical", + "aria": "suitcase medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "tag", + "aria": "tag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "tags", + "aria": "tags", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "taxi", + "aria": "taxi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "thumbtack", + "aria": "thumbtack", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "ticket", + "aria": "ticket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "ticket simple", + "aria": "ticket simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "traffic light", + "aria": "traffic light", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "train", + "aria": "train", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "train subway", + "aria": "train subway", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "train tram", + "aria": "train tram", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "tree", + "aria": "tree", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "trophy", + "aria": "trophy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "truck", + "aria": "truck", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "truck medical", + "aria": "truck medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "tty", + "aria": "tty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "umbrella", + "aria": "umbrella", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "utensils", + "aria": "utensils", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "vest", + "aria": "vest", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "vest patches", + "aria": "vest patches", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "wheelchair", + "aria": "wheelchair", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "wheelchair move", + "aria": "wheelchair move", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "wifi", + "aria": "wifi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "wine glass", + "aria": "wine glass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "地图", + "name": "wrench", + "aria": "wrench", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "audio description", + "aria": "audio description", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "circle", + "aria": "circle", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "circle", + "aria": "circle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "clapperboard", + "aria": "clapperboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "closed captioning", + "aria": "closed captioning", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "closed captioning", + "aria": "closed captioning", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "compact disc", + "aria": "compact disc", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "file audio", + "aria": "file audio", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "file audio", + "aria": "file audio", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "file video", + "aria": "file video", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "file video", + "aria": "file video", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "film", + "aria": "film", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "headphones", + "aria": "headphones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "microphone", + "aria": "microphone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "microphone lines", + "aria": "microphone lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "microphone lines slash", + "aria": "microphone lines slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "microphone slash", + "aria": "microphone slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "photo film", + "aria": "photo film", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "podcast", + "aria": "podcast", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "square rss", + "aria": "square rss", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "ticket", + "aria": "ticket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "tower broadcast", + "aria": "tower broadcast", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "tower cell", + "aria": "tower cell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "tv", + "aria": "tv", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "video", + "aria": "video", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "video slash", + "aria": "video slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "电影和视频", + "name": "youtube", + "aria": "youtube", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "bugs", + "aria": "bugs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "cat", + "aria": "cat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "cow", + "aria": "cow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "crow", + "aria": "crow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "dog", + "aria": "dog", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "dove", + "aria": "dove", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "dragon", + "aria": "dragon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "feather", + "aria": "feather", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "feather pointed", + "aria": "feather pointed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "fish", + "aria": "fish", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "fish fins", + "aria": "fish fins", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "frog", + "aria": "frog", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "hippo", + "aria": "hippo", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "horse", + "aria": "horse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "horse head", + "aria": "horse head", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "kiwi bird", + "aria": "kiwi bird", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "locust", + "aria": "locust", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "mosquito", + "aria": "mosquito", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "otter", + "aria": "otter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "paw", + "aria": "paw", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "shield cat", + "aria": "shield cat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "shield dog", + "aria": "shield dog", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "shrimp", + "aria": "shrimp", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "spider", + "aria": "spider", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "动物", + "name": "worm", + "aria": "worm", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "glasses", + "aria": "glasses", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "graduation cap", + "aria": "graduation cap", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "hat cowboy", + "aria": "hat cowboy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "hat cowboy side", + "aria": "hat cowboy side", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "hat wizard", + "aria": "hat wizard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "mitten", + "aria": "mitten", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "shirt", + "aria": "shirt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "shoe prints", + "aria": "shoe prints", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "socks", + "aria": "socks", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "user tie", + "aria": "user tie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "vest", + "aria": "vest", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "服装", + "name": "vest patches", + "aria": "vest patches", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "alipay", + "aria": "alipay", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "amazon pay", + "aria": "amazon pay", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "apple pay", + "aria": "apple pay", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "bag shopping", + "aria": "bag shopping", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "barcode", + "aria": "barcode", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "basket shopping", + "aria": "basket shopping", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "bitcoin", + "aria": "bitcoin", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "bookmark", + "aria": "bookmark", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "bookmark", + "aria": "bookmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "btc", + "aria": "btc", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "bullhorn", + "aria": "bullhorn", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "camera", + "aria": "camera", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "camera retro", + "aria": "camera retro", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cart arrow down", + "aria": "cart arrow down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cart plus", + "aria": "cart plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cart shopping", + "aria": "cart shopping", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cash register", + "aria": "cash register", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc amazon pay", + "aria": "cc amazon pay", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc amex", + "aria": "cc amex", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc apple pay", + "aria": "cc apple pay", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc diners club", + "aria": "cc diners club", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc discover", + "aria": "cc discover", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc jcb", + "aria": "cc jcb", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc mastercard", + "aria": "cc mastercard", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc paypal", + "aria": "cc paypal", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc stripe", + "aria": "cc stripe", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "cc visa", + "aria": "cc visa", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "certificate", + "aria": "certificate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "credit card", + "aria": "credit card", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "credit card", + "aria": "credit card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "ethereum", + "aria": "ethereum", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "gem", + "aria": "gem", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "gem", + "aria": "gem", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "gift", + "aria": "gift", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "gifts", + "aria": "gifts", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "google pay", + "aria": "google pay", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "google wallet", + "aria": "google wallet", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "handshake", + "aria": "handshake", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "handshake", + "aria": "handshake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "key", + "aria": "key", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "money check", + "aria": "money check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "money check dollar", + "aria": "money check dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "nfc directional", + "aria": "nfc directional", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "nfc symbol", + "aria": "nfc symbol", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "paypal", + "aria": "paypal", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "person booth", + "aria": "person booth", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "receipt", + "aria": "receipt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "shirt", + "aria": "shirt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "shop", + "aria": "shop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "shop lock", + "aria": "shop lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "shop slash", + "aria": "shop slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "star", + "aria": "star", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "star", + "aria": "star", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "store", + "aria": "store", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "store slash", + "aria": "store slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "stripe", + "aria": "stripe", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "stripe s", + "aria": "stripe s", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "tag", + "aria": "tag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "tags", + "aria": "tags", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "thumbs down", + "aria": "thumbs down", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "thumbs down", + "aria": "thumbs down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "thumbs up", + "aria": "thumbs up", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "thumbs up", + "aria": "thumbs up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "trophy", + "aria": "trophy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "truck", + "aria": "truck", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "购物", + "name": "truck fast", + "aria": "truck fast", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "anchor", + "aria": "anchor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "anchor circle check", + "aria": "anchor circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "anchor circle exclamation", + "aria": "anchor circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "anchor circle xmark", + "aria": "anchor circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "anchor lock", + "aria": "anchor lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "ferry", + "aria": "ferry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "fish", + "aria": "fish", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "fish fins", + "aria": "fish fins", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "otter", + "aria": "otter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "person swimming", + "aria": "person swimming", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "sailboat", + "aria": "sailboat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "ship", + "aria": "ship", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "shrimp", + "aria": "shrimp", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "航海", + "name": "water", + "aria": "water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "anchor", + "aria": "anchor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "anchor circle check", + "aria": "anchor circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "anchor circle exclamation", + "aria": "anchor circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "anchor circle xmark", + "aria": "anchor circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "anchor lock", + "aria": "anchor lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "box", + "aria": "box", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "boxes packing", + "aria": "boxes packing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "boxes stacked", + "aria": "boxes stacked", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "bridge", + "aria": "bridge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "bridge circle check", + "aria": "bridge circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "bridge circle exclamation", + "aria": "bridge circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "bridge circle xmark", + "aria": "bridge circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "bridge lock", + "aria": "bridge lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "bridge water", + "aria": "bridge water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "bus", + "aria": "bus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "bus simple", + "aria": "bus simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "car", + "aria": "car", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "car tunnel", + "aria": "car tunnel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "cart flatbed", + "aria": "cart flatbed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "chart simple", + "aria": "chart simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "clipboard check", + "aria": "clipboard check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "clipboard list", + "aria": "clipboard list", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "clipboard question", + "aria": "clipboard question", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "dolly", + "aria": "dolly", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "ferry", + "aria": "ferry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "gas pump", + "aria": "gas pump", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "gears", + "aria": "gears", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "helicopter", + "aria": "helicopter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "helicopter symbol", + "aria": "helicopter symbol", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "helmet safety", + "aria": "helmet safety", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "jet fighter up", + "aria": "jet fighter up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "pallet", + "aria": "pallet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "plane circle check", + "aria": "plane circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "plane circle exclamation", + "aria": "plane circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "plane circle xmark", + "aria": "plane circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "plane lock", + "aria": "plane lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "road", + "aria": "road", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "road barrier", + "aria": "road barrier", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "road bridge", + "aria": "road bridge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "road circle check", + "aria": "road circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "road circle exclamation", + "aria": "road circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "road circle xmark", + "aria": "road circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "road lock", + "aria": "road lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "sailboat", + "aria": "sailboat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "square nfi", + "aria": "square nfi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "train", + "aria": "train", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "train subway", + "aria": "train subway", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "truck", + "aria": "truck", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "truck arrow right", + "aria": "truck arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "truck fast", + "aria": "truck fast", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "truck field", + "aria": "truck field", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "truck field un", + "aria": "truck field un", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "truck front", + "aria": "truck front", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "truck plane", + "aria": "truck plane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "warehouse", + "aria": "warehouse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "后勤和物流", + "name": "xmarks lines", + "aria": "xmarks lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "arrow up from water pump", + "aria": "arrow up from water pump", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "bath", + "aria": "bath", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "bed", + "aria": "bed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "blender", + "aria": "blender", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "box tissue", + "aria": "box tissue", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "chair", + "aria": "chair", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "computer", + "aria": "computer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "couch", + "aria": "couch", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "door closed", + "aria": "door closed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "door open", + "aria": "door open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "dungeon", + "aria": "dungeon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "fan", + "aria": "fan", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "faucet", + "aria": "faucet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "faucet drip", + "aria": "faucet drip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "fire burner", + "aria": "fire burner", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "house chimney user", + "aria": "house chimney user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "house chimney window", + "aria": "house chimney window", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "house fire", + "aria": "house fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "house laptop", + "aria": "house laptop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "house lock", + "aria": "house lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "house signal", + "aria": "house signal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "house user", + "aria": "house user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "jar", + "aria": "jar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "jar wheat", + "aria": "jar wheat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "jug detergent", + "aria": "jug detergent", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "kitchen set", + "aria": "kitchen set", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "lightbulb", + "aria": "lightbulb", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "lightbulb", + "aria": "lightbulb", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "mattress pillow", + "aria": "mattress pillow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "mug saucer", + "aria": "mug saucer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "people roof", + "aria": "people roof", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "plug", + "aria": "plug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "pump soap", + "aria": "pump soap", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "rug", + "aria": "rug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "sheet plastic", + "aria": "sheet plastic", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "shower", + "aria": "shower", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "sink", + "aria": "sink", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "soap", + "aria": "soap", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "spoon", + "aria": "spoon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "stairs", + "aria": "stairs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "temperature arrow down", + "aria": "temperature arrow down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "temperature arrow up", + "aria": "temperature arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "toilet", + "aria": "toilet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "toilet paper", + "aria": "toilet paper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "toilet paper slash", + "aria": "toilet paper slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "tv", + "aria": "tv", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "家庭", + "name": "utensils", + "aria": "utensils", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "candy cane", + "aria": "candy cane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "carrot", + "aria": "carrot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "champagne glasses", + "aria": "champagne glasses", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "cookie bite", + "aria": "cookie bite", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "face grin hearts", + "aria": "face grin hearts", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "face grin hearts", + "aria": "face grin hearts", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "face kiss wink heart", + "aria": "face kiss wink heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "face kiss wink heart", + "aria": "face kiss wink heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "gift", + "aria": "gift", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "gifts", + "aria": "gifts", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "holly berry", + "aria": "holly berry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "menorah", + "aria": "menorah", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "mug hot", + "aria": "mug hot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "sleigh", + "aria": "sleigh", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "假日", + "name": "snowman", + "aria": "snowman", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "arrow up from ground water", + "aria": "arrow up from ground water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "bore hole", + "aria": "bore hole", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "brush", + "aria": "brush", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "bucket", + "aria": "bucket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "compass drafting", + "aria": "compass drafting", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "dumpster", + "aria": "dumpster", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "dumpster fire", + "aria": "dumpster fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "hammer", + "aria": "hammer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "helmet safety", + "aria": "helmet safety", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "mound", + "aria": "mound", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "paint roller", + "aria": "paint roller", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "pen ruler", + "aria": "pen ruler", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "pencil", + "aria": "pencil", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "person digging", + "aria": "person digging", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "ruler", + "aria": "ruler", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "ruler combined", + "aria": "ruler combined", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "ruler horizontal", + "aria": "ruler horizontal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "ruler vertical", + "aria": "ruler vertical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "screwdriver", + "aria": "screwdriver", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "screwdriver wrench", + "aria": "screwdriver wrench", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "sheet plastic", + "aria": "sheet plastic", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "tarp", + "aria": "tarp", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "tarp droplet", + "aria": "tarp droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "toilet portable", + "aria": "toilet portable", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "toilets portable", + "aria": "toilets portable", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "toolbox", + "aria": "toolbox", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "trowel", + "aria": "trowel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "trowel bricks", + "aria": "trowel bricks", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "truck pickup", + "aria": "truck pickup", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑施工", + "name": "wrench", + "aria": "wrench", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "archway", + "aria": "archway", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "arrow right to city", + "aria": "arrow right to city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building", + "aria": "building", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building", + "aria": "building", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building circle arrow right", + "aria": "building circle arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building circle check", + "aria": "building circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building circle exclamation", + "aria": "building circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building circle xmark", + "aria": "building circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building columns", + "aria": "building columns", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building flag", + "aria": "building flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building lock", + "aria": "building lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building ngo", + "aria": "building ngo", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building shield", + "aria": "building shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building un", + "aria": "building un", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building user", + "aria": "building user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "building wheat", + "aria": "building wheat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "campground", + "aria": "campground", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "church", + "aria": "church", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "city", + "aria": "city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "dungeon", + "aria": "dungeon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "gopuram", + "aria": "gopuram", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "hospital", + "aria": "hospital", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "hospital", + "aria": "hospital", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "hospital user", + "aria": "hospital user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "hotel", + "aria": "hotel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house", + "aria": "house", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house chimney", + "aria": "house chimney", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house chimney crack", + "aria": "house chimney crack", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house chimney medical", + "aria": "house chimney medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house chimney window", + "aria": "house chimney window", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house circle check", + "aria": "house circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house circle exclamation", + "aria": "house circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house circle xmark", + "aria": "house circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house crack", + "aria": "house crack", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house fire", + "aria": "house fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house flag", + "aria": "house flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house lock", + "aria": "house lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house medical", + "aria": "house medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house medical circle check", + "aria": "house medical circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house medical circle exclamation", + "aria": "house medical circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house medical circle xmark", + "aria": "house medical circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "house medical flag", + "aria": "house medical flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "igloo", + "aria": "igloo", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "industry", + "aria": "industry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "kaaba", + "aria": "kaaba", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "landmark", + "aria": "landmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "landmark dome", + "aria": "landmark dome", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "landmark flag", + "aria": "landmark flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "monument", + "aria": "monument", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "mosque", + "aria": "mosque", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "mountain city", + "aria": "mountain city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "oil well", + "aria": "oil well", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "place of worship", + "aria": "place of worship", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "school", + "aria": "school", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "school circle check", + "aria": "school circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "school circle exclamation", + "aria": "school circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "school circle xmark", + "aria": "school circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "school flag", + "aria": "school flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "school lock", + "aria": "school lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "shop", + "aria": "shop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "shop lock", + "aria": "shop lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "store", + "aria": "store", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "synagogue", + "aria": "synagogue", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "tent", + "aria": "tent", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "tent arrow down to line", + "aria": "tent arrow down to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "tent arrow left right", + "aria": "tent arrow left right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "tent arrow turn left", + "aria": "tent arrow turn left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "tent arrows down", + "aria": "tent arrows down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "tents", + "aria": "tents", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "toilet portable", + "aria": "toilet portable", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "toilets portable", + "aria": "toilets portable", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "torii gate", + "aria": "torii gate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "tower observation", + "aria": "tower observation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "tree city", + "aria": "tree city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "vihara", + "aria": "vihara", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "建筑物", + "name": "warehouse", + "aria": "warehouse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "angle down", + "aria": "angle down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "angle left", + "aria": "angle left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "angle right", + "aria": "angle right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "angle up", + "aria": "angle up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "angles down", + "aria": "angles down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "angles left", + "aria": "angles left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "angles right", + "aria": "angles right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "angles up", + "aria": "angles up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down", + "aria": "arrow down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down 1 9", + "aria": "arrow down 1 9", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down 9 1", + "aria": "arrow down 9 1", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down a z", + "aria": "arrow down a z", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down long", + "aria": "arrow down long", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down short wide", + "aria": "arrow down short wide", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down up across line", + "aria": "arrow down up across line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down up lock", + "aria": "arrow down up lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down wide short", + "aria": "arrow down wide short", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow down z a", + "aria": "arrow down z a", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow left", + "aria": "arrow left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow left long", + "aria": "arrow left long", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow pointer", + "aria": "arrow pointer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow right", + "aria": "arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow right arrow left", + "aria": "arrow right arrow left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow right from bracket", + "aria": "arrow right from bracket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow right long", + "aria": "arrow right long", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow right to bracket", + "aria": "arrow right to bracket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow rotate left", + "aria": "arrow rotate left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow rotate right", + "aria": "arrow rotate right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow trend down", + "aria": "arrow trend down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow trend up", + "aria": "arrow trend up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow turn down", + "aria": "arrow turn down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow turn up", + "aria": "arrow turn up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up", + "aria": "arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up 1 9", + "aria": "arrow up 1 9", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up 9 1", + "aria": "arrow up 9 1", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up a z", + "aria": "arrow up a z", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up from bracket", + "aria": "arrow up from bracket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up long", + "aria": "arrow up long", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up right dots", + "aria": "arrow up right dots", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up right from square", + "aria": "arrow up right from square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up short wide", + "aria": "arrow up short wide", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up wide short", + "aria": "arrow up wide short", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrow up z a", + "aria": "arrow up z a", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows down to line", + "aria": "arrows down to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows left right", + "aria": "arrows left right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows left right to line", + "aria": "arrows left right to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows rotate", + "aria": "arrows rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows spin", + "aria": "arrows spin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows split up and left", + "aria": "arrows split up and left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows to circle", + "aria": "arrows to circle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows to dot", + "aria": "arrows to dot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows to eye", + "aria": "arrows to eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows turn right", + "aria": "arrows turn right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows turn to dots", + "aria": "arrows turn to dots", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows up down", + "aria": "arrows up down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows up down left right", + "aria": "arrows up down left right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "arrows up to line", + "aria": "arrows up to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "caret down", + "aria": "caret down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "caret left", + "aria": "caret left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "caret right", + "aria": "caret right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "caret up", + "aria": "caret up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "chevron down", + "aria": "chevron down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "chevron left", + "aria": "chevron left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "chevron right", + "aria": "chevron right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "chevron up", + "aria": "chevron up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle arrow down", + "aria": "circle arrow down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle arrow left", + "aria": "circle arrow left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle arrow right", + "aria": "circle arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle arrow up", + "aria": "circle arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle chevron down", + "aria": "circle chevron down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle chevron left", + "aria": "circle chevron left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle chevron right", + "aria": "circle chevron right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle chevron up", + "aria": "circle chevron up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle down", + "aria": "circle down", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle down", + "aria": "circle down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle left", + "aria": "circle left", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle left", + "aria": "circle left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle right", + "aria": "circle right", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle right", + "aria": "circle right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle up", + "aria": "circle up", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "circle up", + "aria": "circle up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "clock rotate left", + "aria": "clock rotate left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "cloud arrow down", + "aria": "cloud arrow down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "cloud arrow up", + "aria": "cloud arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "down left and up right to center", + "aria": "down left and up right to center", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "down long", + "aria": "down long", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "download", + "aria": "download", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "left long", + "aria": "left long", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "left right", + "aria": "left right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "location arrow", + "aria": "location arrow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "maximize", + "aria": "maximize", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "recycle", + "aria": "recycle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "repeat", + "aria": "repeat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "reply", + "aria": "reply", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "reply all", + "aria": "reply all", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "retweet", + "aria": "retweet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "right from bracket", + "aria": "right from bracket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "right left", + "aria": "right left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "right long", + "aria": "right long", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "right to bracket", + "aria": "right to bracket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "rotate", + "aria": "rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "rotate left", + "aria": "rotate left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "rotate right", + "aria": "rotate right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "share", + "aria": "share", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "share from square", + "aria": "share from square", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "share from square", + "aria": "share from square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "shuffle", + "aria": "shuffle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "sort", + "aria": "sort", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "sort down", + "aria": "sort down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "sort up", + "aria": "sort up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square arrow up right", + "aria": "square arrow up right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square caret down", + "aria": "square caret down", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square caret down", + "aria": "square caret down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square caret left", + "aria": "square caret left", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square caret left", + "aria": "square caret left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square caret right", + "aria": "square caret right", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square caret right", + "aria": "square caret right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square caret up", + "aria": "square caret up", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square caret up", + "aria": "square caret up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "square up right", + "aria": "square up right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "turn down", + "aria": "turn down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "turn up", + "aria": "turn up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "up down", + "aria": "up down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "up down left right", + "aria": "up down left right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "up long", + "aria": "up long", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "up right and down left from center", + "aria": "up right and down left from center", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "up right from square", + "aria": "up right from square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "箭头", + "name": "upload", + "aria": "upload", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "accessible icon", + "aria": "accessible icon", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "baby carriage", + "aria": "baby carriage", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "bicycle", + "aria": "bicycle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "bus", + "aria": "bus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "bus simple", + "aria": "bus simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "cable car", + "aria": "cable car", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "car", + "aria": "car", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "car burst", + "aria": "car burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "car rear", + "aria": "car rear", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "car side", + "aria": "car side", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "car tunnel", + "aria": "car tunnel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "cart shopping", + "aria": "cart shopping", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "ferry", + "aria": "ferry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "helicopter", + "aria": "helicopter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "horse", + "aria": "horse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "jet fighter", + "aria": "jet fighter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "jet fighter up", + "aria": "jet fighter up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "motorcycle", + "aria": "motorcycle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "mound", + "aria": "mound", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "paper plane", + "aria": "paper plane", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "paper plane", + "aria": "paper plane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "plane", + "aria": "plane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "plane slash", + "aria": "plane slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "plane up", + "aria": "plane up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "road", + "aria": "road", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "road barrier", + "aria": "road barrier", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "road spikes", + "aria": "road spikes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "rocket", + "aria": "rocket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "sailboat", + "aria": "sailboat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "ship", + "aria": "ship", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "shuttle space", + "aria": "shuttle space", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "sleigh", + "aria": "sleigh", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "snowplow", + "aria": "snowplow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "taxi", + "aria": "taxi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "tractor", + "aria": "tractor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "train", + "aria": "train", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "train subway", + "aria": "train subway", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "train tram", + "aria": "train tram", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck", + "aria": "truck", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck arrow right", + "aria": "truck arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck droplet", + "aria": "truck droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck field", + "aria": "truck field", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck field un", + "aria": "truck field un", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck front", + "aria": "truck front", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck medical", + "aria": "truck medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck monster", + "aria": "truck monster", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck pickup", + "aria": "truck pickup", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "truck plane", + "aria": "truck plane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "van shuttle", + "aria": "van shuttle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "wheelchair", + "aria": "wheelchair", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "交通运输", + "name": "wheelchair move", + "aria": "wheelchair move", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "apple whole", + "aria": "apple whole", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "atom", + "aria": "atom", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "award", + "aria": "award", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "bell slash", + "aria": "bell slash", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "bell slash", + "aria": "bell slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "book open", + "aria": "book open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "book open reader", + "aria": "book open reader", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "chalkboard", + "aria": "chalkboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "chalkboard user", + "aria": "chalkboard user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "graduation cap", + "aria": "graduation cap", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "laptop code", + "aria": "laptop code", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "laptop file", + "aria": "laptop file", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "masks theater", + "aria": "masks theater", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "microscope", + "aria": "microscope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "music", + "aria": "music", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "person chalkboard", + "aria": "person chalkboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "school", + "aria": "school", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "school circle check", + "aria": "school circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "school circle exclamation", + "aria": "school circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "school circle xmark", + "aria": "school circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "school flag", + "aria": "school flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "school lock", + "aria": "school lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "shapes", + "aria": "shapes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "教育", + "name": "user graduate", + "aria": "user graduate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "austral sign", + "aria": "austral sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "baht sign", + "aria": "baht sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "bangladeshi taka sign", + "aria": "bangladeshi taka sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "bitcoin", + "aria": "bitcoin", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "bitcoin sign", + "aria": "bitcoin sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "brazilian real sign", + "aria": "brazilian real sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "btc", + "aria": "btc", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "cash register", + "aria": "cash register", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "cedi sign", + "aria": "cedi sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "cent sign", + "aria": "cent sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "chart line", + "aria": "chart line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "chart pie", + "aria": "chart pie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "circle dollar to slot", + "aria": "circle dollar to slot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "coins", + "aria": "coins", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "colon sign", + "aria": "colon sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "comment dollar", + "aria": "comment dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "comments dollar", + "aria": "comments dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "credit card", + "aria": "credit card", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "credit card", + "aria": "credit card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "cruzeiro sign", + "aria": "cruzeiro sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "dollar sign", + "aria": "dollar sign", + "glyph": "$", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "dong sign", + "aria": "dong sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "ethereum", + "aria": "ethereum", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "euro sign", + "aria": "euro sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "file invoice", + "aria": "file invoice", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "file invoice dollar", + "aria": "file invoice dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "florin sign", + "aria": "florin sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "franc sign", + "aria": "franc sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "gg", + "aria": "gg", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "gg circle", + "aria": "gg circle", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "guarani sign", + "aria": "guarani sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "hand holding dollar", + "aria": "hand holding dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "hryvnia sign", + "aria": "hryvnia sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "indian rupee sign", + "aria": "indian rupee sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "kip sign", + "aria": "kip sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "landmark", + "aria": "landmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "lari sign", + "aria": "lari sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "lira sign", + "aria": "lira sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "litecoin sign", + "aria": "litecoin sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "manat sign", + "aria": "manat sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "mill sign", + "aria": "mill sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money bill", + "aria": "money bill", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money bill 1", + "aria": "money bill 1", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money bill 1", + "aria": "money bill 1", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money bill 1 wave", + "aria": "money bill 1 wave", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money bill transfer", + "aria": "money bill transfer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money bill trend up", + "aria": "money bill trend up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money bill wave", + "aria": "money bill wave", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money bill wheat", + "aria": "money bill wheat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money bills", + "aria": "money bills", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money check", + "aria": "money check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "money check dollar", + "aria": "money check dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "naira sign", + "aria": "naira sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "percent", + "aria": "percent", + "glyph": "%", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "peseta sign", + "aria": "peseta sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "peso sign", + "aria": "peso sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "piggy bank", + "aria": "piggy bank", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "receipt", + "aria": "receipt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "ruble sign", + "aria": "ruble sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "rupee sign", + "aria": "rupee sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "rupiah sign", + "aria": "rupiah sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "sack dollar", + "aria": "sack dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "sack xmark", + "aria": "sack xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "scale balanced", + "aria": "scale balanced", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "scale unbalanced", + "aria": "scale unbalanced", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "scale unbalanced flip", + "aria": "scale unbalanced flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "shekel sign", + "aria": "shekel sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "stamp", + "aria": "stamp", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "sterling sign", + "aria": "sterling sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "tenge sign", + "aria": "tenge sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "turkish lira sign", + "aria": "turkish lira sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "vault", + "aria": "vault", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "wallet", + "aria": "wallet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "won sign", + "aria": "won sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "金钱", + "name": "yen sign", + "aria": "yen sign", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "bell slash", + "aria": "bell slash", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "bell slash", + "aria": "bell slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "circle exclamation", + "aria": "circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "circle radiation", + "aria": "circle radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "exclamation", + "aria": "exclamation", + "glyph": "!", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "question", + "aria": "question", + "glyph": "?", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "radiation", + "aria": "radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "skull crossbones", + "aria": "skull crossbones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "警示", + "name": "triangle exclamation", + "aria": "triangle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "atom", + "aria": "atom", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "book journal whills", + "aria": "book journal whills", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "explosion", + "aria": "explosion", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "galactic republic", + "aria": "galactic republic", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "galactic senate", + "aria": "galactic senate", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "hand spock", + "aria": "hand spock", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "hand spock", + "aria": "hand spock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "jedi", + "aria": "jedi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "jedi order", + "aria": "jedi order", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "old republic", + "aria": "old republic", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "robot", + "aria": "robot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "rocket", + "aria": "rocket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "space awesome", + "aria": "space awesome", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "科幻小说", + "name": "user astronaut", + "aria": "user astronaut", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "atom", + "aria": "atom", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "biohazard", + "aria": "biohazard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "brain", + "aria": "brain", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "capsules", + "aria": "capsules", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "circle radiation", + "aria": "circle radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "clipboard check", + "aria": "clipboard check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "disease", + "aria": "disease", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "dna", + "aria": "dna", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "eye dropper", + "aria": "eye dropper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "filter", + "aria": "filter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "fire", + "aria": "fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "fire flame curved", + "aria": "fire flame curved", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "fire flame simple", + "aria": "fire flame simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "flask", + "aria": "flask", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "flask vial", + "aria": "flask vial", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "frog", + "aria": "frog", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "magnet", + "aria": "magnet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "microscope", + "aria": "microscope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "mortar pestle", + "aria": "mortar pestle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "pills", + "aria": "pills", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "prescription bottle", + "aria": "prescription bottle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "radiation", + "aria": "radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "seedling", + "aria": "seedling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "skull crossbones", + "aria": "skull crossbones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "square virus", + "aria": "square virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "syringe", + "aria": "syringe", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "tablets", + "aria": "tablets", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "temperature high", + "aria": "temperature high", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "temperature low", + "aria": "temperature low", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "vial", + "aria": "vial", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "vial circle check", + "aria": "vial circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "vial virus", + "aria": "vial virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "科学", + "name": "vials", + "aria": "vials", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "bluetooth", + "aria": "bluetooth", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "circle nodes", + "aria": "circle nodes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "cloud", + "aria": "cloud", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "cloud arrow down", + "aria": "cloud arrow down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "cloud arrow up", + "aria": "cloud arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "ethernet", + "aria": "ethernet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "globe", + "aria": "globe", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "house signal", + "aria": "house signal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "rss", + "aria": "rss", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "satellite dish", + "aria": "satellite dish", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "signal", + "aria": "signal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "tower broadcast", + "aria": "tower broadcast", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "tower cell", + "aria": "tower cell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "连通性", + "name": "wifi", + "aria": "wifi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "binoculars", + "aria": "binoculars", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "bottle water", + "aria": "bottle water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "bucket", + "aria": "bucket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "campground", + "aria": "campground", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "caravan", + "aria": "caravan", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "compass", + "aria": "compass", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "compass", + "aria": "compass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "faucet", + "aria": "faucet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "faucet drip", + "aria": "faucet drip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "fire", + "aria": "fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "fire burner", + "aria": "fire burner", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "fire flame curved", + "aria": "fire flame curved", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "frog", + "aria": "frog", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "kit medical", + "aria": "kit medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "map", + "aria": "map", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "map", + "aria": "map", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "map location", + "aria": "map location", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "map location dot", + "aria": "map location dot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "mattress pillow", + "aria": "mattress pillow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "mosquito", + "aria": "mosquito", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "mosquito net", + "aria": "mosquito net", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "mountain", + "aria": "mountain", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "mountain sun", + "aria": "mountain sun", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "people roof", + "aria": "people roof", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "person hiking", + "aria": "person hiking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "person shelter", + "aria": "person shelter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "route", + "aria": "route", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "signs post", + "aria": "signs post", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "tarp", + "aria": "tarp", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "tarp droplet", + "aria": "tarp droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "tent", + "aria": "tent", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "tent arrow down to line", + "aria": "tent arrow down to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "tent arrow left right", + "aria": "tent arrow left right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "tent arrow turn left", + "aria": "tent arrow turn left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "tent arrows down", + "aria": "tent arrows down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "tents", + "aria": "tents", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "toilet paper", + "aria": "toilet paper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "trailer", + "aria": "trailer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "露营", + "name": "tree", + "aria": "tree", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "archway", + "aria": "archway", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "baby carriage", + "aria": "baby carriage", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "ban smoking", + "aria": "ban smoking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "bath", + "aria": "bath", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "bed", + "aria": "bed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "bell concierge", + "aria": "bell concierge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "book atlas", + "aria": "book atlas", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "briefcase", + "aria": "briefcase", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "bus", + "aria": "bus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "bus simple", + "aria": "bus simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "cable car", + "aria": "cable car", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "car", + "aria": "car", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "caravan", + "aria": "caravan", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "cart flatbed suitcase", + "aria": "cart flatbed suitcase", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "dice", + "aria": "dice", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "dice five", + "aria": "dice five", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "door closed", + "aria": "door closed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "door open", + "aria": "door open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "dumbbell", + "aria": "dumbbell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "earth africa", + "aria": "earth africa", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "earth americas", + "aria": "earth americas", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "earth asia", + "aria": "earth asia", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "earth europe", + "aria": "earth europe", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "earth oceania", + "aria": "earth oceania", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "elevator", + "aria": "elevator", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "hot tub person", + "aria": "hot tub person", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "hotel", + "aria": "hotel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "infinity", + "aria": "infinity", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "key", + "aria": "key", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "kitchen set", + "aria": "kitchen set", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "map", + "aria": "map", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "map", + "aria": "map", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "map location", + "aria": "map location", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "map location dot", + "aria": "map location dot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "martini glass", + "aria": "martini glass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "martini glass citrus", + "aria": "martini glass citrus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "martini glass empty", + "aria": "martini glass empty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "monument", + "aria": "monument", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "mountain city", + "aria": "mountain city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "mug saucer", + "aria": "mug saucer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "passport", + "aria": "passport", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "person swimming", + "aria": "person swimming", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "person walking luggage", + "aria": "person walking luggage", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "plane", + "aria": "plane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "plane arrival", + "aria": "plane arrival", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "plane circle check", + "aria": "plane circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "plane circle exclamation", + "aria": "plane circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "plane circle xmark", + "aria": "plane circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "plane departure", + "aria": "plane departure", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "plane lock", + "aria": "plane lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "plane slash", + "aria": "plane slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "plane up", + "aria": "plane up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "shower", + "aria": "shower", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "smoking", + "aria": "smoking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "spa", + "aria": "spa", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "stairs", + "aria": "stairs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "suitcase", + "aria": "suitcase", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "suitcase rolling", + "aria": "suitcase rolling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "taxi", + "aria": "taxi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "toilet", + "aria": "toilet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "toilet paper", + "aria": "toilet paper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "train tram", + "aria": "train tram", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "tree city", + "aria": "tree city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "tv", + "aria": "tv", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "umbrella beach", + "aria": "umbrella beach", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "utensils", + "aria": "utensils", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "van shuttle", + "aria": "van shuttle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "water ladder", + "aria": "water ladder", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "wheelchair", + "aria": "wheelchair", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "wheelchair move", + "aria": "wheelchair move", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "wifi", + "aria": "wifi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "wine glass", + "aria": "wine glass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旅行和酒店", + "name": "wine glass empty", + "aria": "wine glass empty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "arrow rotate left", + "aria": "arrow rotate left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "arrow rotate right", + "aria": "arrow rotate right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "arrows rotate", + "aria": "arrows rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "backward", + "aria": "backward", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "backward fast", + "aria": "backward fast", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "backward step", + "aria": "backward step", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "circle pause", + "aria": "circle pause", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "circle pause", + "aria": "circle pause", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "circle play", + "aria": "circle play", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "circle play", + "aria": "circle play", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "circle stop", + "aria": "circle stop", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "circle stop", + "aria": "circle stop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "compress", + "aria": "compress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "down left and up right to center", + "aria": "down left and up right to center", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "eject", + "aria": "eject", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "expand", + "aria": "expand", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "forward", + "aria": "forward", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "forward fast", + "aria": "forward fast", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "forward step", + "aria": "forward step", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "hand", + "aria": "hand", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "hand", + "aria": "hand", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "maximize", + "aria": "maximize", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "minimize", + "aria": "minimize", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "music", + "aria": "music", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "pause", + "aria": "pause", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "phone volume", + "aria": "phone volume", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "play", + "aria": "play", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "plus minus", + "aria": "plus minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "repeat", + "aria": "repeat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "rotate", + "aria": "rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "rotate left", + "aria": "rotate left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "rotate right", + "aria": "rotate right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "rss", + "aria": "rss", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "shuffle", + "aria": "shuffle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "sliders", + "aria": "sliders", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "stop", + "aria": "stop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "up right and down left from center", + "aria": "up right and down left from center", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "volume high", + "aria": "volume high", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "volume low", + "aria": "volume low", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "volume off", + "aria": "volume off", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "媒体播放", + "name": "volume xmark", + "aria": "volume xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "arrow up from ground water", + "aria": "arrow up from ground water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "atom", + "aria": "atom", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "battery empty", + "aria": "battery empty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "battery full", + "aria": "battery full", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "battery half", + "aria": "battery half", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "battery quarter", + "aria": "battery quarter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "battery three quarters", + "aria": "battery three quarters", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "bolt", + "aria": "bolt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "car battery", + "aria": "car battery", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "charging station", + "aria": "charging station", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "circle radiation", + "aria": "circle radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "explosion", + "aria": "explosion", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "fan", + "aria": "fan", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "fire", + "aria": "fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "fire flame curved", + "aria": "fire flame curved", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "fire flame simple", + "aria": "fire flame simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "gas pump", + "aria": "gas pump", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "industry", + "aria": "industry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "leaf", + "aria": "leaf", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "lightbulb", + "aria": "lightbulb", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "lightbulb", + "aria": "lightbulb", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "oil well", + "aria": "oil well", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "plug", + "aria": "plug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "plug circle bolt", + "aria": "plug circle bolt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "plug circle check", + "aria": "plug circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "plug circle exclamation", + "aria": "plug circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "plug circle minus", + "aria": "plug circle minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "plug circle plus", + "aria": "plug circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "plug circle xmark", + "aria": "plug circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "poop", + "aria": "poop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "power off", + "aria": "power off", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "radiation", + "aria": "radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "seedling", + "aria": "seedling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "solar panel", + "aria": "solar panel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "sun", + "aria": "sun", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "sun", + "aria": "sun", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "tower broadcast", + "aria": "tower broadcast", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "water", + "aria": "water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "能源", + "name": "wind", + "aria": "wind", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "bus", + "aria": "bus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "bus simple", + "aria": "bus simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "car", + "aria": "car", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "car battery", + "aria": "car battery", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "car burst", + "aria": "car burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "car on", + "aria": "car on", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "car rear", + "aria": "car rear", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "car side", + "aria": "car side", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "car tunnel", + "aria": "car tunnel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "caravan", + "aria": "caravan", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "charging station", + "aria": "charging station", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "gas pump", + "aria": "gas pump", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "gauge", + "aria": "gauge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "gauge high", + "aria": "gauge high", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "gauge simple", + "aria": "gauge simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "gauge simple high", + "aria": "gauge simple high", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "motorcycle", + "aria": "motorcycle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "oil can", + "aria": "oil can", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "spray can sparkles", + "aria": "spray can sparkles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "taxi", + "aria": "taxi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "trailer", + "aria": "trailer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "truck", + "aria": "truck", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "truck field", + "aria": "truck field", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "truck field un", + "aria": "truck field un", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "truck medical", + "aria": "truck medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "truck monster", + "aria": "truck monster", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "truck pickup", + "aria": "truck pickup", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "汽车", + "name": "van shuttle", + "aria": "van shuttle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "bullseye", + "aria": "bullseye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "circle", + "aria": "circle", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "circle", + "aria": "circle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "circle check", + "aria": "circle check", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "circle check", + "aria": "circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "circle dot", + "aria": "circle dot", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "circle dot", + "aria": "circle dot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "location crosshairs", + "aria": "location crosshairs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "microphone", + "aria": "microphone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "microphone slash", + "aria": "microphone slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "plane up", + "aria": "plane up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "signal", + "aria": "signal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "star", + "aria": "star", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "star", + "aria": "star", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "star half", + "aria": "star half", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "star half", + "aria": "star half", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "star half stroke", + "aria": "star half stroke", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "star half stroke", + "aria": "star half stroke", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "toggle off", + "aria": "toggle off", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "toggle on", + "aria": "toggle on", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "切换", + "name": "wifi", + "aria": "wifi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "anchor", + "aria": "anchor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "anchor circle check", + "aria": "anchor circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "anchor circle exclamation", + "aria": "anchor circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "anchor circle xmark", + "aria": "anchor circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "anchor lock", + "aria": "anchor lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrow down up across line", + "aria": "arrow down up across line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrow down up lock", + "aria": "arrow down up lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrow right to city", + "aria": "arrow right to city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrow up from ground water", + "aria": "arrow up from ground water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrow up from water pump", + "aria": "arrow up from water pump", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrow up right dots", + "aria": "arrow up right dots", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrow up right from square", + "aria": "arrow up right from square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows down to line", + "aria": "arrows down to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows down to people", + "aria": "arrows down to people", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows left right to line", + "aria": "arrows left right to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows spin", + "aria": "arrows spin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows split up and left", + "aria": "arrows split up and left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows to circle", + "aria": "arrows to circle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows to dot", + "aria": "arrows to dot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows to eye", + "aria": "arrows to eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows turn right", + "aria": "arrows turn right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows turn to dots", + "aria": "arrows turn to dots", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "arrows up to line", + "aria": "arrows up to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "baby", + "aria": "baby", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bacterium", + "aria": "bacterium", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "ban", + "aria": "ban", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bed", + "aria": "bed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "biohazard", + "aria": "biohazard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "book bookmark", + "aria": "book bookmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bore hole", + "aria": "bore hole", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bottle droplet", + "aria": "bottle droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bottle water", + "aria": "bottle water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bowl food", + "aria": "bowl food", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bowl rice", + "aria": "bowl rice", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "boxes packing", + "aria": "boxes packing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bridge", + "aria": "bridge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bridge circle check", + "aria": "bridge circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bridge circle exclamation", + "aria": "bridge circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bridge circle xmark", + "aria": "bridge circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bridge lock", + "aria": "bridge lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bridge water", + "aria": "bridge water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bucket", + "aria": "bucket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bugs", + "aria": "bugs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building", + "aria": "building", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building", + "aria": "building", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building circle arrow right", + "aria": "building circle arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building circle check", + "aria": "building circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building circle exclamation", + "aria": "building circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building circle xmark", + "aria": "building circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building columns", + "aria": "building columns", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building flag", + "aria": "building flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building lock", + "aria": "building lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building ngo", + "aria": "building ngo", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building shield", + "aria": "building shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building un", + "aria": "building un", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building user", + "aria": "building user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "building wheat", + "aria": "building wheat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "burst", + "aria": "burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "bus", + "aria": "bus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "car", + "aria": "car", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "car on", + "aria": "car on", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "car tunnel", + "aria": "car tunnel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "child combatant", + "aria": "child combatant", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "children", + "aria": "children", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "church", + "aria": "church", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "circle h", + "aria": "circle h", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "circle nodes", + "aria": "circle nodes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "clipboard question", + "aria": "clipboard question", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "clipboard user", + "aria": "clipboard user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "cloud bolt", + "aria": "cloud bolt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "cloud showers heavy", + "aria": "cloud showers heavy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "cloud showers water", + "aria": "cloud showers water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "computer", + "aria": "computer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "cow", + "aria": "cow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "cubes stacked", + "aria": "cubes stacked", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "display", + "aria": "display", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "droplet", + "aria": "droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "envelope", + "aria": "envelope", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "envelope", + "aria": "envelope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "envelope circle check", + "aria": "envelope circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "explosion", + "aria": "explosion", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "faucet drip", + "aria": "faucet drip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "fax", + "aria": "fax", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "ferry", + "aria": "ferry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file", + "aria": "file", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file", + "aria": "file", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file circle check", + "aria": "file circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file circle exclamation", + "aria": "file circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file circle minus", + "aria": "file circle minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file circle plus", + "aria": "file circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file circle question", + "aria": "file circle question", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file circle xmark", + "aria": "file circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file csv", + "aria": "file csv", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file pdf", + "aria": "file pdf", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file pdf", + "aria": "file pdf", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file pen", + "aria": "file pen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "file shield", + "aria": "file shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "fire burner", + "aria": "fire burner", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "fire flame simple", + "aria": "fire flame simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "fish fins", + "aria": "fish fins", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "flag", + "aria": "flag", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "flag", + "aria": "flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "flask vial", + "aria": "flask vial", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "gas pump", + "aria": "gas pump", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "glass water", + "aria": "glass water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "glass water droplet", + "aria": "glass water droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "gopuram", + "aria": "gopuram", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "group arrows rotate", + "aria": "group arrows rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hammer", + "aria": "hammer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hand holding hand", + "aria": "hand holding hand", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "handcuffs", + "aria": "handcuffs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hands bound", + "aria": "hands bound", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hands bubbles", + "aria": "hands bubbles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hands holding child", + "aria": "hands holding child", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hands holding circle", + "aria": "hands holding circle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "handshake simple", + "aria": "handshake simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "headset", + "aria": "headset", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "heart circle bolt", + "aria": "heart circle bolt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "heart circle check", + "aria": "heart circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "heart circle exclamation", + "aria": "heart circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "heart circle minus", + "aria": "heart circle minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "heart circle plus", + "aria": "heart circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "heart circle xmark", + "aria": "heart circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "helicopter", + "aria": "helicopter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "helicopter symbol", + "aria": "helicopter symbol", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "helmet un", + "aria": "helmet un", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hill avalanche", + "aria": "hill avalanche", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hill rockslide", + "aria": "hill rockslide", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hospital", + "aria": "hospital", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hospital", + "aria": "hospital", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hotel", + "aria": "hotel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house chimney", + "aria": "house chimney", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house chimney crack", + "aria": "house chimney crack", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house circle check", + "aria": "house circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house circle exclamation", + "aria": "house circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house circle xmark", + "aria": "house circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house fire", + "aria": "house fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house flag", + "aria": "house flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house flood water", + "aria": "house flood water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house flood water circle arrow right", + "aria": "house flood water circle arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house lock", + "aria": "house lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house medical", + "aria": "house medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house medical circle check", + "aria": "house medical circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house medical circle exclamation", + "aria": "house medical circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house medical circle xmark", + "aria": "house medical circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house medical flag", + "aria": "house medical flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house signal", + "aria": "house signal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "house tsunami", + "aria": "house tsunami", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "hurricane", + "aria": "hurricane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "id card", + "aria": "id card", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "id card", + "aria": "id card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "jar", + "aria": "jar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "jar wheat", + "aria": "jar wheat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "jet fighter up", + "aria": "jet fighter up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "jug detergent", + "aria": "jug detergent", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "kitchen set", + "aria": "kitchen set", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "land mine on", + "aria": "land mine on", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "landmark", + "aria": "landmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "landmark dome", + "aria": "landmark dome", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "landmark flag", + "aria": "landmark flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "laptop", + "aria": "laptop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "laptop file", + "aria": "laptop file", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "life ring", + "aria": "life ring", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "life ring", + "aria": "life ring", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "lines leaning", + "aria": "lines leaning", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "location pin lock", + "aria": "location pin lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "locust", + "aria": "locust", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "lungs", + "aria": "lungs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "magnifying glass arrow right", + "aria": "magnifying glass arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "magnifying glass chart", + "aria": "magnifying glass chart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mars and venus", + "aria": "mars and venus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mars and venus burst", + "aria": "mars and venus burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mask face", + "aria": "mask face", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mask ventilator", + "aria": "mask ventilator", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mattress pillow", + "aria": "mattress pillow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "microscope", + "aria": "microscope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mobile retro", + "aria": "mobile retro", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mobile screen", + "aria": "mobile screen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "money bill transfer", + "aria": "money bill transfer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "money bill trend up", + "aria": "money bill trend up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "money bill wheat", + "aria": "money bill wheat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "money bills", + "aria": "money bills", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mosque", + "aria": "mosque", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mosquito", + "aria": "mosquito", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mosquito net", + "aria": "mosquito net", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mound", + "aria": "mound", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mountain city", + "aria": "mountain city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "mountain sun", + "aria": "mountain sun", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "oil well", + "aria": "oil well", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "parachute box", + "aria": "parachute box", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "people arrows", + "aria": "people arrows", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "people group", + "aria": "people group", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "people line", + "aria": "people line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "people pulling", + "aria": "people pulling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "people robbery", + "aria": "people robbery", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "people roof", + "aria": "people roof", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person", + "aria": "person", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person arrow down to line", + "aria": "person arrow down to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person arrow up from line", + "aria": "person arrow up from line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person breastfeeding", + "aria": "person breastfeeding", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person burst", + "aria": "person burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person cane", + "aria": "person cane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person chalkboard", + "aria": "person chalkboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person circle check", + "aria": "person circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person circle exclamation", + "aria": "person circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person circle minus", + "aria": "person circle minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person circle plus", + "aria": "person circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person circle question", + "aria": "person circle question", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person circle xmark", + "aria": "person circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person digging", + "aria": "person digging", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person dress", + "aria": "person dress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person dress burst", + "aria": "person dress burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person drowning", + "aria": "person drowning", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person falling", + "aria": "person falling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person falling burst", + "aria": "person falling burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person half dress", + "aria": "person half dress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person harassing", + "aria": "person harassing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person military pointing", + "aria": "person military pointing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person military rifle", + "aria": "person military rifle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person military to person", + "aria": "person military to person", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person pregnant", + "aria": "person pregnant", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person rays", + "aria": "person rays", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person rifle", + "aria": "person rifle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person shelter", + "aria": "person shelter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person through window", + "aria": "person through window", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person walking", + "aria": "person walking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person walking arrow loop left", + "aria": "person walking arrow loop left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person walking arrow right", + "aria": "person walking arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person walking dashed line arrow right", + "aria": "person walking dashed line arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "person walking luggage", + "aria": "person walking luggage", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "pills", + "aria": "pills", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plane circle check", + "aria": "plane circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plane circle exclamation", + "aria": "plane circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plane circle xmark", + "aria": "plane circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plane lock", + "aria": "plane lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plane up", + "aria": "plane up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plant wilt", + "aria": "plant wilt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plate wheat", + "aria": "plate wheat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plug", + "aria": "plug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plug circle bolt", + "aria": "plug circle bolt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plug circle check", + "aria": "plug circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plug circle exclamation", + "aria": "plug circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plug circle minus", + "aria": "plug circle minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plug circle plus", + "aria": "plug circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "plug circle xmark", + "aria": "plug circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "pump soap", + "aria": "pump soap", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "radiation", + "aria": "radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "radio", + "aria": "radio", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "ranking star", + "aria": "ranking star", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "road", + "aria": "road", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "road barrier", + "aria": "road barrier", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "road bridge", + "aria": "road bridge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "road circle check", + "aria": "road circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "road circle exclamation", + "aria": "road circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "road circle xmark", + "aria": "road circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "road lock", + "aria": "road lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "road spikes", + "aria": "road spikes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "rug", + "aria": "rug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "sack dollar", + "aria": "sack dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "sack xmark", + "aria": "sack xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "sailboat", + "aria": "sailboat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "satellite dish", + "aria": "satellite dish", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "scale balanced", + "aria": "scale balanced", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "school", + "aria": "school", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "school circle check", + "aria": "school circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "school circle exclamation", + "aria": "school circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "school circle xmark", + "aria": "school circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "school flag", + "aria": "school flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "school lock", + "aria": "school lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "seedling", + "aria": "seedling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "sheet plastic", + "aria": "sheet plastic", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "shield cat", + "aria": "shield cat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "shield dog", + "aria": "shield dog", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "shield heart", + "aria": "shield heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "ship", + "aria": "ship", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "shirt", + "aria": "shirt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "shop", + "aria": "shop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "shop lock", + "aria": "shop lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "shower", + "aria": "shower", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "skull crossbones", + "aria": "skull crossbones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "soap", + "aria": "soap", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "square nfi", + "aria": "square nfi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "square person confined", + "aria": "square person confined", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "square virus", + "aria": "square virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "staff snake", + "aria": "staff snake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "stethoscope", + "aria": "stethoscope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "suitcase medical", + "aria": "suitcase medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "sun plant wilt", + "aria": "sun plant wilt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "syringe", + "aria": "syringe", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tarp", + "aria": "tarp", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tarp droplet", + "aria": "tarp droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "temperature arrow down", + "aria": "temperature arrow down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "temperature arrow up", + "aria": "temperature arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tent", + "aria": "tent", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tent arrow down to line", + "aria": "tent arrow down to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tent arrow left right", + "aria": "tent arrow left right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tent arrow turn left", + "aria": "tent arrow turn left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tent arrows down", + "aria": "tent arrows down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tents", + "aria": "tents", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "toilet", + "aria": "toilet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "toilet portable", + "aria": "toilet portable", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "toilets portable", + "aria": "toilets portable", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tornado", + "aria": "tornado", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tower broadcast", + "aria": "tower broadcast", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tower cell", + "aria": "tower cell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tower observation", + "aria": "tower observation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "train subway", + "aria": "train subway", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "trash can", + "aria": "trash can", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "trash can", + "aria": "trash can", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "tree city", + "aria": "tree city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "trowel", + "aria": "trowel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "trowel bricks", + "aria": "trowel bricks", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "truck", + "aria": "truck", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "truck arrow right", + "aria": "truck arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "truck droplet", + "aria": "truck droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "truck field", + "aria": "truck field", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "truck field un", + "aria": "truck field un", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "truck front", + "aria": "truck front", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "truck medical", + "aria": "truck medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "truck plane", + "aria": "truck plane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "user doctor", + "aria": "user doctor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "user injured", + "aria": "user injured", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "users between lines", + "aria": "users between lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "users line", + "aria": "users line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "users rays", + "aria": "users rays", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "users rectangle", + "aria": "users rectangle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "users viewfinder", + "aria": "users viewfinder", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "vial circle check", + "aria": "vial circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "vial virus", + "aria": "vial virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "vihara", + "aria": "vihara", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "virus", + "aria": "virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "virus covid", + "aria": "virus covid", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "volcano", + "aria": "volcano", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "walkie talkie", + "aria": "walkie talkie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "wheat awn", + "aria": "wheat awn", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "wheat awn circle exclamation", + "aria": "wheat awn circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "wheelchair move", + "aria": "wheelchair move", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "wifi", + "aria": "wifi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "wind", + "aria": "wind", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "worm", + "aria": "worm", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "人文", + "name": "xmarks lines", + "aria": "xmarks lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "address book", + "aria": "address book", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "address book", + "aria": "address book", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "address card", + "aria": "address card", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "address card", + "aria": "address card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "arrows spin", + "aria": "arrows spin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "arrows to dot", + "aria": "arrows to dot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "arrows to eye", + "aria": "arrows to eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "bars progress", + "aria": "bars progress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "bars staggered", + "aria": "bars staggered", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "book", + "aria": "book", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "box archive", + "aria": "box archive", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "boxes packing", + "aria": "boxes packing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "briefcase", + "aria": "briefcase", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "building", + "aria": "building", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "building", + "aria": "building", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "bullhorn", + "aria": "bullhorn", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "bullseye", + "aria": "bullseye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "business time", + "aria": "business time", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "cake candles", + "aria": "cake candles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "calculator", + "aria": "calculator", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "calendar", + "aria": "calendar", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "calendar", + "aria": "calendar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "calendar days", + "aria": "calendar days", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "calendar days", + "aria": "calendar days", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "certificate", + "aria": "certificate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "chart line", + "aria": "chart line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "chart pie", + "aria": "chart pie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "chart simple", + "aria": "chart simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "city", + "aria": "city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "clipboard", + "aria": "clipboard", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "clipboard", + "aria": "clipboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "clipboard question", + "aria": "clipboard question", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "compass", + "aria": "compass", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "compass", + "aria": "compass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "copy", + "aria": "copy", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "copy", + "aria": "copy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "copyright", + "aria": "copyright", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "copyright", + "aria": "copyright", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "envelope", + "aria": "envelope", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "envelope", + "aria": "envelope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "envelope circle check", + "aria": "envelope circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "envelope open", + "aria": "envelope open", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "envelope open", + "aria": "envelope open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "eraser", + "aria": "eraser", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "fax", + "aria": "fax", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "file", + "aria": "file", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "file", + "aria": "file", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "file circle plus", + "aria": "file circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "file lines", + "aria": "file lines", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "file lines", + "aria": "file lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "floppy disk", + "aria": "floppy disk", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "floppy disk", + "aria": "floppy disk", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "folder", + "aria": "folder", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "folder", + "aria": "folder", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "folder minus", + "aria": "folder minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "folder open", + "aria": "folder open", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "folder open", + "aria": "folder open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "folder plus", + "aria": "folder plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "folder tree", + "aria": "folder tree", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "glasses", + "aria": "glasses", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "globe", + "aria": "globe", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "highlighter", + "aria": "highlighter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "house laptop", + "aria": "house laptop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "industry", + "aria": "industry", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "landmark", + "aria": "landmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "laptop file", + "aria": "laptop file", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "list check", + "aria": "list check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "magnifying glass arrow right", + "aria": "magnifying glass arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "magnifying glass chart", + "aria": "magnifying glass chart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "marker", + "aria": "marker", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "mug saucer", + "aria": "mug saucer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "network wired", + "aria": "network wired", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "note sticky", + "aria": "note sticky", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "note sticky", + "aria": "note sticky", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "paperclip", + "aria": "paperclip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "paste", + "aria": "paste", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "paste", + "aria": "paste", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "pen", + "aria": "pen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "pen clip", + "aria": "pen clip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "pen fancy", + "aria": "pen fancy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "pen nib", + "aria": "pen nib", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "pen to square", + "aria": "pen to square", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "pen to square", + "aria": "pen to square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "pencil", + "aria": "pencil", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "percent", + "aria": "percent", + "glyph": "%", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "person chalkboard", + "aria": "person chalkboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "phone", + "aria": "phone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "phone flip", + "aria": "phone flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "phone slash", + "aria": "phone slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "phone volume", + "aria": "phone volume", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "print", + "aria": "print", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "registered", + "aria": "registered", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "registered", + "aria": "registered", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "scale balanced", + "aria": "scale balanced", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "scale unbalanced", + "aria": "scale unbalanced", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "scale unbalanced flip", + "aria": "scale unbalanced flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "scissors", + "aria": "scissors", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "signature", + "aria": "signature", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "sitemap", + "aria": "sitemap", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "socks", + "aria": "socks", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "square envelope", + "aria": "square envelope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "square pen", + "aria": "square pen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "square phone", + "aria": "square phone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "square phone flip", + "aria": "square phone flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "square poll horizontal", + "aria": "square poll horizontal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "square poll vertical", + "aria": "square poll vertical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "stapler", + "aria": "stapler", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "table", + "aria": "table", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "table columns", + "aria": "table columns", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "tag", + "aria": "tag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "tags", + "aria": "tags", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "thumbtack", + "aria": "thumbtack", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "timeline", + "aria": "timeline", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "trademark", + "aria": "trademark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "vault", + "aria": "vault", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "商务", + "name": "wallet", + "aria": "wallet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "blender phone", + "aria": "blender phone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "camera", + "aria": "camera", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "camera retro", + "aria": "camera retro", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "car battery", + "aria": "car battery", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "compact disc", + "aria": "compact disc", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "computer", + "aria": "computer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "computer mouse", + "aria": "computer mouse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "database", + "aria": "database", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "desktop", + "aria": "desktop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "display", + "aria": "display", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "download", + "aria": "download", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "ethernet", + "aria": "ethernet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "fax", + "aria": "fax", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "floppy disk", + "aria": "floppy disk", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "floppy disk", + "aria": "floppy disk", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "gamepad", + "aria": "gamepad", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "hard drive", + "aria": "hard drive", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "hard drive", + "aria": "hard drive", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "headphones", + "aria": "headphones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "house laptop", + "aria": "house laptop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "keyboard", + "aria": "keyboard", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "keyboard", + "aria": "keyboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "laptop", + "aria": "laptop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "laptop file", + "aria": "laptop file", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "memory", + "aria": "memory", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "microchip", + "aria": "microchip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "mobile", + "aria": "mobile", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "mobile button", + "aria": "mobile button", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "mobile retro", + "aria": "mobile retro", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "mobile screen", + "aria": "mobile screen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "mobile screen button", + "aria": "mobile screen button", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "plug", + "aria": "plug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "power off", + "aria": "power off", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "print", + "aria": "print", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "satellite", + "aria": "satellite", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "satellite dish", + "aria": "satellite dish", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "sd card", + "aria": "sd card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "server", + "aria": "server", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "sim card", + "aria": "sim card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "tablet", + "aria": "tablet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "tablet button", + "aria": "tablet button", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "tablet screen button", + "aria": "tablet screen button", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "tachograph digital", + "aria": "tachograph digital", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "tv", + "aria": "tv", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "upload", + "aria": "upload", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设备和硬件", + "name": "walkie talkie", + "aria": "walkie talkie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "bezier curve", + "aria": "bezier curve", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "brush", + "aria": "brush", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "circle half stroke", + "aria": "circle half stroke", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "circle nodes", + "aria": "circle nodes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "clone", + "aria": "clone", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "clone", + "aria": "clone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "compass drafting", + "aria": "compass drafting", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "copy", + "aria": "copy", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "copy", + "aria": "copy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "crop", + "aria": "crop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "crop simple", + "aria": "crop simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "crosshairs", + "aria": "crosshairs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "cube", + "aria": "cube", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "cubes", + "aria": "cubes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "draw polygon", + "aria": "draw polygon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "droplet", + "aria": "droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "droplet slash", + "aria": "droplet slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "eraser", + "aria": "eraser", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "eye dropper", + "aria": "eye dropper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "fill", + "aria": "fill", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "fill drip", + "aria": "fill drip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "floppy disk", + "aria": "floppy disk", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "floppy disk", + "aria": "floppy disk", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "font awesome", + "aria": "font awesome", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "font awesome", + "aria": "font awesome", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "font awesome", + "aria": "font awesome", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "highlighter", + "aria": "highlighter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "icons", + "aria": "icons", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "layer group", + "aria": "layer group", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "lines leaning", + "aria": "lines leaning", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "marker", + "aria": "marker", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "object group", + "aria": "object group", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "object group", + "aria": "object group", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "object ungroup", + "aria": "object ungroup", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "object ungroup", + "aria": "object ungroup", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "paint roller", + "aria": "paint roller", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "paintbrush", + "aria": "paintbrush", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "palette", + "aria": "palette", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "paste", + "aria": "paste", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "paste", + "aria": "paste", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "pen", + "aria": "pen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "pen clip", + "aria": "pen clip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "pen fancy", + "aria": "pen fancy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "pen nib", + "aria": "pen nib", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "pen ruler", + "aria": "pen ruler", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "pen to square", + "aria": "pen to square", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "pen to square", + "aria": "pen to square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "pencil", + "aria": "pencil", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "ruler combined", + "aria": "ruler combined", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "ruler horizontal", + "aria": "ruler horizontal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "ruler vertical", + "aria": "ruler vertical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "scissors", + "aria": "scissors", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "splotch", + "aria": "splotch", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "spray can", + "aria": "spray can", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "stamp", + "aria": "stamp", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "stapler", + "aria": "stapler", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "swatchbook", + "aria": "swatchbook", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "vector square", + "aria": "vector square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "wand magic", + "aria": "wand magic", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "设计", + "name": "wand magic sparkles", + "aria": "wand magic sparkles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "cake candles", + "aria": "cake candles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "camera", + "aria": "camera", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "circle user", + "aria": "circle user", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "circle user", + "aria": "circle user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "comment", + "aria": "comment", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "comment", + "aria": "comment", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "envelope", + "aria": "envelope", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "envelope", + "aria": "envelope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "hashtag", + "aria": "hashtag", + "glyph": "#", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "icons", + "aria": "icons", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "image", + "aria": "image", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "image", + "aria": "image", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "images", + "aria": "images", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "images", + "aria": "images", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "location dot", + "aria": "location dot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "location pin", + "aria": "location pin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "message", + "aria": "message", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "message", + "aria": "message", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "photo film", + "aria": "photo film", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "retweet", + "aria": "retweet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "share", + "aria": "share", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "share from square", + "aria": "share from square", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "share from square", + "aria": "share from square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "share nodes", + "aria": "share nodes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "square poll horizontal", + "aria": "square poll horizontal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "square poll vertical", + "aria": "square poll vertical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "square share nodes", + "aria": "square share nodes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "star", + "aria": "star", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "star", + "aria": "star", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "thumbs down", + "aria": "thumbs down", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "thumbs down", + "aria": "thumbs down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "thumbs up", + "aria": "thumbs up", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "thumbs up", + "aria": "thumbs up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "thumbtack", + "aria": "thumbtack", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "user", + "aria": "user", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "user", + "aria": "user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "user group", + "aria": "user group", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "user plus", + "aria": "user plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "users", + "aria": "users", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "社交", + "name": "video", + "aria": "video", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "bell", + "aria": "bell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "bell slash", + "aria": "bell slash", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "bell slash", + "aria": "bell slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar", + "aria": "calendar", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar", + "aria": "calendar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar check", + "aria": "calendar check", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar check", + "aria": "calendar check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar day", + "aria": "calendar day", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar days", + "aria": "calendar days", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar days", + "aria": "calendar days", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar minus", + "aria": "calendar minus", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar minus", + "aria": "calendar minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar plus", + "aria": "calendar plus", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar plus", + "aria": "calendar plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar week", + "aria": "calendar week", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar xmark", + "aria": "calendar xmark", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "calendar xmark", + "aria": "calendar xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "clock", + "aria": "clock", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "clock", + "aria": "clock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "hourglass", + "aria": "hourglass", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "hourglass", + "aria": "hourglass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "hourglass end", + "aria": "hourglass end", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "hourglass half", + "aria": "hourglass half", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "hourglass half", + "aria": "hourglass half", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "hourglass start", + "aria": "hourglass start", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "stopwatch", + "aria": "stopwatch", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "时间", + "name": "stopwatch 20", + "aria": "stopwatch 20", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "apple whole", + "aria": "apple whole", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "bacon", + "aria": "bacon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "beer mug empty", + "aria": "beer mug empty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "blender", + "aria": "blender", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "bone", + "aria": "bone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "bottle droplet", + "aria": "bottle droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "bottle water", + "aria": "bottle water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "bowl food", + "aria": "bowl food", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "bowl rice", + "aria": "bowl rice", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "bread slice", + "aria": "bread slice", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "burger", + "aria": "burger", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "cake candles", + "aria": "cake candles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "candy cane", + "aria": "candy cane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "carrot", + "aria": "carrot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "champagne glasses", + "aria": "champagne glasses", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "cheese", + "aria": "cheese", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "cloud meatball", + "aria": "cloud meatball", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "cookie", + "aria": "cookie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "cubes stacked", + "aria": "cubes stacked", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "drumstick bite", + "aria": "drumstick bite", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "egg", + "aria": "egg", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "fish", + "aria": "fish", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "fish fins", + "aria": "fish fins", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "flask", + "aria": "flask", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "glass water", + "aria": "glass water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "glass water droplet", + "aria": "glass water droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "hotdog", + "aria": "hotdog", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "ice cream", + "aria": "ice cream", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "jar", + "aria": "jar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "jar wheat", + "aria": "jar wheat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "lemon", + "aria": "lemon", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "lemon", + "aria": "lemon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "martini glass", + "aria": "martini glass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "martini glass citrus", + "aria": "martini glass citrus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "martini glass empty", + "aria": "martini glass empty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "mug hot", + "aria": "mug hot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "mug saucer", + "aria": "mug saucer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "pepper hot", + "aria": "pepper hot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "pizza slice", + "aria": "pizza slice", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "plate wheat", + "aria": "plate wheat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "seedling", + "aria": "seedling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "shrimp", + "aria": "shrimp", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "stroopwafel", + "aria": "stroopwafel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "wheat awn", + "aria": "wheat awn", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "wheat awn circle exclamation", + "aria": "wheat awn circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "whiskey glass", + "aria": "whiskey glass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "wine bottle", + "aria": "wine bottle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "wine glass", + "aria": "wine glass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "食物和饮料", + "name": "wine glass empty", + "aria": "wine glass empty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "arrows spin", + "aria": "arrows spin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "arrows to dot", + "aria": "arrows to dot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "arrows to eye", + "aria": "arrows to eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "bullhorn", + "aria": "bullhorn", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "bullseye", + "aria": "bullseye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "chart simple", + "aria": "chart simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "comment dollar", + "aria": "comment dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "comments dollar", + "aria": "comments dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "envelope open text", + "aria": "envelope open text", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "envelopes bulk", + "aria": "envelopes bulk", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "filter circle dollar", + "aria": "filter circle dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "group arrows rotate", + "aria": "group arrows rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "lightbulb", + "aria": "lightbulb", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "lightbulb", + "aria": "lightbulb", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "magnifying glass arrow right", + "aria": "magnifying glass arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "magnifying glass chart", + "aria": "magnifying glass chart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "magnifying glass dollar", + "aria": "magnifying glass dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "magnifying glass location", + "aria": "magnifying glass location", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "people group", + "aria": "people group", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "person rays", + "aria": "person rays", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "ranking star", + "aria": "ranking star", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "rectangle ad", + "aria": "rectangle ad", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "square poll horizontal", + "aria": "square poll horizontal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "square poll vertical", + "aria": "square poll vertical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "市场营销", + "name": "timeline", + "aria": "timeline", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand", + "aria": "hand", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand", + "aria": "hand", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand back fist", + "aria": "hand back fist", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand back fist", + "aria": "hand back fist", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand dots", + "aria": "hand dots", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand fist", + "aria": "hand fist", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand holding", + "aria": "hand holding", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand holding dollar", + "aria": "hand holding dollar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand holding droplet", + "aria": "hand holding droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand holding hand", + "aria": "hand holding hand", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand holding heart", + "aria": "hand holding heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand holding medical", + "aria": "hand holding medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand lizard", + "aria": "hand lizard", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand lizard", + "aria": "hand lizard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand middle finger", + "aria": "hand middle finger", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand peace", + "aria": "hand peace", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand peace", + "aria": "hand peace", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand point down", + "aria": "hand point down", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand point down", + "aria": "hand point down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand point left", + "aria": "hand point left", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand point left", + "aria": "hand point left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand point right", + "aria": "hand point right", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand point right", + "aria": "hand point right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand point up", + "aria": "hand point up", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand point up", + "aria": "hand point up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand pointer", + "aria": "hand pointer", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand pointer", + "aria": "hand pointer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand scissors", + "aria": "hand scissors", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand scissors", + "aria": "hand scissors", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand sparkles", + "aria": "hand sparkles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand spock", + "aria": "hand spock", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hand spock", + "aria": "hand spock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hands bound", + "aria": "hands bound", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hands bubbles", + "aria": "hands bubbles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hands clapping", + "aria": "hands clapping", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hands holding", + "aria": "hands holding", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hands holding child", + "aria": "hands holding child", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hands holding circle", + "aria": "hands holding circle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "hands praying", + "aria": "hands praying", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "handshake", + "aria": "handshake", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "handshake", + "aria": "handshake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "handshake angle", + "aria": "handshake angle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "handshake simple", + "aria": "handshake simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "handshake simple slash", + "aria": "handshake simple slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "handshake slash", + "aria": "handshake slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "thumbs down", + "aria": "thumbs down", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "thumbs down", + "aria": "thumbs down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "thumbs up", + "aria": "thumbs up", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "手", + "name": "thumbs up", + "aria": "thumbs up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "calculator", + "aria": "calculator", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "circle minus", + "aria": "circle minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "circle plus", + "aria": "circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "circle xmark", + "aria": "circle xmark", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "circle xmark", + "aria": "circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "divide", + "aria": "divide", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "equals", + "aria": "equals", + "glyph": "=", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "greater than", + "aria": "greater than", + "glyph": ">", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "greater than equal", + "aria": "greater than equal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "infinity", + "aria": "infinity", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "less than", + "aria": "less than", + "glyph": "<", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "less than equal", + "aria": "less than equal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "minus", + "aria": "minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "not equal", + "aria": "not equal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "percent", + "aria": "percent", + "glyph": "%", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "plus", + "aria": "plus", + "glyph": "+", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "plus minus", + "aria": "plus minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "square minus", + "aria": "square minus", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "square minus", + "aria": "square minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "square root variable", + "aria": "square root variable", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "square xmark", + "aria": "square xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "subscript", + "aria": "subscript", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "superscript", + "aria": "superscript", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "wave square", + "aria": "wave square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数学计算", + "name": "xmark", + "aria": "xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "0", + "aria": "0", + "glyph": "0", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "1", + "aria": "1", + "glyph": "1", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "2", + "aria": "2", + "glyph": "2", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "3", + "aria": "3", + "glyph": "3", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "4", + "aria": "4", + "glyph": "4", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "5", + "aria": "5", + "glyph": "5", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "6", + "aria": "6", + "glyph": "6", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "7", + "aria": "7", + "glyph": "7", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "8", + "aria": "8", + "glyph": "8", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "数字", + "name": "9", + "aria": "9", + "glyph": "9", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "水果和蔬菜", + "name": "apple whole", + "aria": "apple whole", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "水果和蔬菜", + "name": "carrot", + "aria": "carrot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "水果和蔬菜", + "name": "leaf", + "aria": "leaf", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "水果和蔬菜", + "name": "lemon", + "aria": "lemon", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "水果和蔬菜", + "name": "lemon", + "aria": "lemon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "水果和蔬菜", + "name": "pepper hot", + "aria": "pepper hot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "水果和蔬菜", + "name": "seedling", + "aria": "seedling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "天文学", + "name": "globe", + "aria": "globe", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "天文学", + "name": "meteor", + "aria": "meteor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "天文学", + "name": "moon", + "aria": "moon", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "天文学", + "name": "moon", + "aria": "moon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "天文学", + "name": "satellite", + "aria": "satellite", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "天文学", + "name": "satellite dish", + "aria": "satellite dish", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "天文学", + "name": "shuttle space", + "aria": "shuttle space", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "天文学", + "name": "user astronaut", + "aria": "user astronaut", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "address book", + "aria": "address book", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "address book", + "aria": "address book", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "address card", + "aria": "address card", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "address card", + "aria": "address card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "at", + "aria": "at", + "glyph": "@", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "blender phone", + "aria": "blender phone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "bluetooth b", + "aria": "bluetooth b", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "bullhorn", + "aria": "bullhorn", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "comment", + "aria": "comment", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "comment", + "aria": "comment", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "comment dots", + "aria": "comment dots", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "comment dots", + "aria": "comment dots", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "comment medical", + "aria": "comment medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "comment slash", + "aria": "comment slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "comment sms", + "aria": "comment sms", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "comments", + "aria": "comments", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "comments", + "aria": "comments", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "ear listen", + "aria": "ear listen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "envelope", + "aria": "envelope", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "envelope", + "aria": "envelope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "envelope circle check", + "aria": "envelope circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "envelope open", + "aria": "envelope open", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "envelope open", + "aria": "envelope open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "face frown", + "aria": "face frown", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "face frown", + "aria": "face frown", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "face meh", + "aria": "face meh", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "face meh", + "aria": "face meh", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "face smile", + "aria": "face smile", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "face smile", + "aria": "face smile", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "fax", + "aria": "fax", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "hands asl interpreting", + "aria": "hands asl interpreting", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "icons", + "aria": "icons", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "inbox", + "aria": "inbox", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "language", + "aria": "language", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "message", + "aria": "message", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "message", + "aria": "message", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "microphone", + "aria": "microphone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "microphone lines", + "aria": "microphone lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "microphone lines slash", + "aria": "microphone lines slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "microphone slash", + "aria": "microphone slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "mobile", + "aria": "mobile", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "mobile button", + "aria": "mobile button", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "mobile retro", + "aria": "mobile retro", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "mobile screen", + "aria": "mobile screen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "mobile screen button", + "aria": "mobile screen button", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "paper plane", + "aria": "paper plane", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "paper plane", + "aria": "paper plane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "phone", + "aria": "phone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "phone flip", + "aria": "phone flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "phone slash", + "aria": "phone slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "phone volume", + "aria": "phone volume", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "poo", + "aria": "poo", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "quote left", + "aria": "quote left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "quote right", + "aria": "quote right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "square envelope", + "aria": "square envelope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "square phone", + "aria": "square phone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "square phone flip", + "aria": "square phone flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "square rss", + "aria": "square rss", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "tower cell", + "aria": "tower cell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "tty", + "aria": "tty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "video", + "aria": "video", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "video slash", + "aria": "video slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "voicemail", + "aria": "voicemail", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "通讯", + "name": "walkie talkie", + "aria": "walkie talkie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "apple whole", + "aria": "apple whole", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "baby", + "aria": "baby", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "baby carriage", + "aria": "baby carriage", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "baseball bat ball", + "aria": "baseball bat ball", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "bath", + "aria": "bath", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "bucket", + "aria": "bucket", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "cake candles", + "aria": "cake candles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "child", + "aria": "child", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "child dress", + "aria": "child dress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "child reaching", + "aria": "child reaching", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "children", + "aria": "children", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "cookie", + "aria": "cookie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "cookie bite", + "aria": "cookie bite", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "cubes stacked", + "aria": "cubes stacked", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "gamepad", + "aria": "gamepad", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "hands holding child", + "aria": "hands holding child", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "ice cream", + "aria": "ice cream", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "mitten", + "aria": "mitten", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "person biking", + "aria": "person biking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "person breastfeeding", + "aria": "person breastfeeding", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "puzzle piece", + "aria": "puzzle piece", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "robot", + "aria": "robot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "school", + "aria": "school", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "shapes", + "aria": "shapes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "童年", + "name": "snowman", + "aria": "snowman", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "bars progress", + "aria": "bars progress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "chart area", + "aria": "chart area", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "chart bar", + "aria": "chart bar", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "chart bar", + "aria": "chart bar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "chart column", + "aria": "chart column", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "chart gantt", + "aria": "chart gantt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "chart line", + "aria": "chart line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "chart pie", + "aria": "chart pie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "chart simple", + "aria": "chart simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "circle half stroke", + "aria": "circle half stroke", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "diagram next", + "aria": "diagram next", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "diagram predecessor", + "aria": "diagram predecessor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "diagram project", + "aria": "diagram project", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "diagram successor", + "aria": "diagram successor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "square poll horizontal", + "aria": "square poll horizontal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "图表", + "name": "square poll vertical", + "aria": "square poll vertical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "book skull", + "aria": "book skull", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "broom", + "aria": "broom", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "cat", + "aria": "cat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "cloud moon", + "aria": "cloud moon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "crow", + "aria": "crow", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "ghost", + "aria": "ghost", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "hat wizard", + "aria": "hat wizard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "mask", + "aria": "mask", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "skull", + "aria": "skull", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "skull crossbones", + "aria": "skull crossbones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "spider", + "aria": "spider", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "toilet paper", + "aria": "toilet paper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "万圣节", + "name": "wand sparkles", + "aria": "wand sparkles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "align center", + "aria": "align center", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "align justify", + "aria": "align justify", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "align left", + "aria": "align left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "align right", + "aria": "align right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "bold", + "aria": "bold", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "border all", + "aria": "border all", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "border none", + "aria": "border none", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "border top left", + "aria": "border top left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "check", + "aria": "check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "check double", + "aria": "check double", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "circle check", + "aria": "circle check", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "circle check", + "aria": "circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "filter circle xmark", + "aria": "filter circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "font", + "aria": "font", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "heading", + "aria": "heading", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "highlighter", + "aria": "highlighter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "i cursor", + "aria": "i cursor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "icons", + "aria": "icons", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "indent", + "aria": "indent", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "italic", + "aria": "italic", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "list", + "aria": "list", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "list check", + "aria": "list check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "list ol", + "aria": "list ol", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "list ul", + "aria": "list ul", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "outdent", + "aria": "outdent", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "paragraph", + "aria": "paragraph", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "rectangle list", + "aria": "rectangle list", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "rectangle list", + "aria": "rectangle list", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "spell check", + "aria": "spell check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "square check", + "aria": "square check", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "square check", + "aria": "square check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "strikethrough", + "aria": "strikethrough", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "subscript", + "aria": "subscript", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "superscript", + "aria": "superscript", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "table", + "aria": "table", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "table cells", + "aria": "table cells", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "table cells large", + "aria": "table cells large", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "table columns", + "aria": "table columns", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "table list", + "aria": "table list", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "text height", + "aria": "text height", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "text slash", + "aria": "text slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "text width", + "aria": "text width", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文本格式", + "name": "underline", + "aria": "underline", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "box archive", + "aria": "box archive", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "clone", + "aria": "clone", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "clone", + "aria": "clone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "copy", + "aria": "copy", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "copy", + "aria": "copy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file", + "aria": "file", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file", + "aria": "file", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file arrow down", + "aria": "file arrow down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file arrow up", + "aria": "file arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file audio", + "aria": "file audio", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file audio", + "aria": "file audio", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file circle check", + "aria": "file circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file circle exclamation", + "aria": "file circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file circle minus", + "aria": "file circle minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file circle plus", + "aria": "file circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file circle question", + "aria": "file circle question", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file circle xmark", + "aria": "file circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file code", + "aria": "file code", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file code", + "aria": "file code", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file csv", + "aria": "file csv", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file excel", + "aria": "file excel", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file excel", + "aria": "file excel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file export", + "aria": "file export", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file image", + "aria": "file image", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file image", + "aria": "file image", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file import", + "aria": "file import", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file lines", + "aria": "file lines", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file lines", + "aria": "file lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file pdf", + "aria": "file pdf", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file pdf", + "aria": "file pdf", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file pen", + "aria": "file pen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file powerpoint", + "aria": "file powerpoint", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file powerpoint", + "aria": "file powerpoint", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file shield", + "aria": "file shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file video", + "aria": "file video", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file video", + "aria": "file video", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file word", + "aria": "file word", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file word", + "aria": "file word", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file zipper", + "aria": "file zipper", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "file zipper", + "aria": "file zipper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "floppy disk", + "aria": "floppy disk", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "floppy disk", + "aria": "floppy disk", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "folder", + "aria": "folder", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "folder", + "aria": "folder", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "folder closed", + "aria": "folder closed", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "folder closed", + "aria": "folder closed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "folder open", + "aria": "folder open", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "folder open", + "aria": "folder open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "note sticky", + "aria": "note sticky", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "note sticky", + "aria": "note sticky", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "paste", + "aria": "paste", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "paste", + "aria": "paste", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "photo film", + "aria": "photo film", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "文件", + "name": "scissors", + "aria": "scissors", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "accessible icon", + "aria": "accessible icon", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "audio description", + "aria": "audio description", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "braille", + "aria": "braille", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "circle info", + "aria": "circle info", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "circle question", + "aria": "circle question", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "circle question", + "aria": "circle question", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "closed captioning", + "aria": "closed captioning", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "closed captioning", + "aria": "closed captioning", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "ear deaf", + "aria": "ear deaf", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "ear listen", + "aria": "ear listen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "eye low vision", + "aria": "eye low vision", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "fingerprint", + "aria": "fingerprint", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "hands", + "aria": "hands", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "hands asl interpreting", + "aria": "hands asl interpreting", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "handshake angle", + "aria": "handshake angle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "person cane", + "aria": "person cane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "person walking with cane", + "aria": "person walking with cane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "phone volume", + "aria": "phone volume", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "question", + "aria": "question", + "glyph": "?", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "tty", + "aria": "tty", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "universal access", + "aria": "universal access", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "wheelchair", + "aria": "wheelchair", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "无障碍", + "name": "wheelchair move", + "aria": "wheelchair move", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "bookmark", + "aria": "bookmark", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "bookmark", + "aria": "bookmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "burst", + "aria": "burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "calendar", + "aria": "calendar", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "calendar", + "aria": "calendar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "certificate", + "aria": "certificate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "circle", + "aria": "circle", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "circle", + "aria": "circle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "circle half stroke", + "aria": "circle half stroke", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "cloud", + "aria": "cloud", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "clover", + "aria": "clover", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "comment", + "aria": "comment", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "comment", + "aria": "comment", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "crown", + "aria": "crown", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "cubes stacked", + "aria": "cubes stacked", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "diamond", + "aria": "diamond", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "file", + "aria": "file", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "file", + "aria": "file", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "folder", + "aria": "folder", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "folder", + "aria": "folder", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "heart crack", + "aria": "heart crack", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "lines leaning", + "aria": "lines leaning", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "location pin", + "aria": "location pin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "play", + "aria": "play", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "shapes", + "aria": "shapes", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "shield", + "aria": "shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "square", + "aria": "square", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "square", + "aria": "square", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "star", + "aria": "star", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "star", + "aria": "star", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "形状", + "name": "ticket simple", + "aria": "ticket simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "genderless", + "aria": "genderless", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "mars", + "aria": "mars", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "mars and venus", + "aria": "mars and venus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "mars double", + "aria": "mars double", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "mars stroke", + "aria": "mars stroke", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "mars stroke right", + "aria": "mars stroke right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "mars stroke up", + "aria": "mars stroke up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "mercury", + "aria": "mercury", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "neuter", + "aria": "neuter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "person half dress", + "aria": "person half dress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "transgender", + "aria": "transgender", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "venus", + "aria": "venus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "venus double", + "aria": "venus double", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "性别", + "name": "venus mars", + "aria": "venus mars", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "arrows spin", + "aria": "arrows spin", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "asterisk", + "aria": "asterisk", + "glyph": "*", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "atom", + "aria": "atom", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "bahai", + "aria": "bahai", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "certificate", + "aria": "certificate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "circle notch", + "aria": "circle notch", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "compact disc", + "aria": "compact disc", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "compass", + "aria": "compass", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "compass", + "aria": "compass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "crosshairs", + "aria": "crosshairs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "dharmachakra", + "aria": "dharmachakra", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "fan", + "aria": "fan", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "gear", + "aria": "gear", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "hurricane", + "aria": "hurricane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "life ring", + "aria": "life ring", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "life ring", + "aria": "life ring", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "palette", + "aria": "palette", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "ring", + "aria": "ring", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "rotate", + "aria": "rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "slash", + "aria": "slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "spinner", + "aria": "spinner", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "stroopwafel", + "aria": "stroopwafel", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "sun", + "aria": "sun", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "sun", + "aria": "sun", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "旋转图标", + "name": "yin yang", + "aria": "yin yang", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "accessible icon", + "aria": "accessible icon", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "bacteria", + "aria": "bacteria", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "bacterium", + "aria": "bacterium", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "ban smoking", + "aria": "ban smoking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "bandage", + "aria": "bandage", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "bed pulse", + "aria": "bed pulse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "biohazard", + "aria": "biohazard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "bone", + "aria": "bone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "bong", + "aria": "bong", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "book medical", + "aria": "book medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "brain", + "aria": "brain", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "briefcase medical", + "aria": "briefcase medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "cannabis", + "aria": "cannabis", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "capsules", + "aria": "capsules", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "circle h", + "aria": "circle h", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "circle radiation", + "aria": "circle radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "clipboard user", + "aria": "clipboard user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "clock rotate left", + "aria": "clock rotate left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "comment medical", + "aria": "comment medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "crutch", + "aria": "crutch", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "disease", + "aria": "disease", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "dna", + "aria": "dna", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "eye dropper", + "aria": "eye dropper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "file medical", + "aria": "file medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "file prescription", + "aria": "file prescription", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "file waveform", + "aria": "file waveform", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "fire flame simple", + "aria": "fire flame simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "flask", + "aria": "flask", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "flask vial", + "aria": "flask vial", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "hand dots", + "aria": "hand dots", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "hand holding medical", + "aria": "hand holding medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "head side cough", + "aria": "head side cough", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "head side cough slash", + "aria": "head side cough slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "head side mask", + "aria": "head side mask", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "head side virus", + "aria": "head side virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "heart circle bolt", + "aria": "heart circle bolt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "heart circle check", + "aria": "heart circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "heart circle exclamation", + "aria": "heart circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "heart circle minus", + "aria": "heart circle minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "heart circle plus", + "aria": "heart circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "heart circle xmark", + "aria": "heart circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "heart pulse", + "aria": "heart pulse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "hospital", + "aria": "hospital", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "hospital", + "aria": "hospital", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "hospital user", + "aria": "hospital user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "house chimney medical", + "aria": "house chimney medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "house medical", + "aria": "house medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "house medical circle check", + "aria": "house medical circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "house medical circle exclamation", + "aria": "house medical circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "house medical circle xmark", + "aria": "house medical circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "house medical flag", + "aria": "house medical flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "id card clip", + "aria": "id card clip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "joint", + "aria": "joint", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "kit medical", + "aria": "kit medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "laptop medical", + "aria": "laptop medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "lungs", + "aria": "lungs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "lungs virus", + "aria": "lungs virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "mask face", + "aria": "mask face", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "mask ventilator", + "aria": "mask ventilator", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "microscope", + "aria": "microscope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "mortar pestle", + "aria": "mortar pestle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "notes medical", + "aria": "notes medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "pager", + "aria": "pager", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "person breastfeeding", + "aria": "person breastfeeding", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "person cane", + "aria": "person cane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "person dots from line", + "aria": "person dots from line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "person half dress", + "aria": "person half dress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "pills", + "aria": "pills", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "plus", + "aria": "plus", + "glyph": "+", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "poop", + "aria": "poop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "prescription", + "aria": "prescription", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "prescription bottle", + "aria": "prescription bottle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "prescription bottle medical", + "aria": "prescription bottle medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "pump medical", + "aria": "pump medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "radiation", + "aria": "radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "receipt", + "aria": "receipt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "shield virus", + "aria": "shield virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "skull", + "aria": "skull", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "skull crossbones", + "aria": "skull crossbones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "smoking", + "aria": "smoking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "square h", + "aria": "square h", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "square plus", + "aria": "square plus", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "square plus", + "aria": "square plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "square virus", + "aria": "square virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "staff snake", + "aria": "staff snake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "star of life", + "aria": "star of life", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "stethoscope", + "aria": "stethoscope", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "suitcase medical", + "aria": "suitcase medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "syringe", + "aria": "syringe", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "tablets", + "aria": "tablets", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "teeth", + "aria": "teeth", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "teeth open", + "aria": "teeth open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "thermometer", + "aria": "thermometer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "tooth", + "aria": "tooth", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "truck medical", + "aria": "truck medical", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "user doctor", + "aria": "user doctor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "user nurse", + "aria": "user nurse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "vial", + "aria": "vial", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "vial circle check", + "aria": "vial circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "vial virus", + "aria": "vial virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "vials", + "aria": "vials", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "virus", + "aria": "virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "virus covid", + "aria": "virus covid", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "virus covid slash", + "aria": "virus covid slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "virus slash", + "aria": "virus slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "viruses", + "aria": "viruses", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "weight scale", + "aria": "weight scale", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "wheelchair", + "aria": "wheelchair", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "wheelchair move", + "aria": "wheelchair move", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "医疗和健康", + "name": "x ray", + "aria": "x ray", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "box archive", + "aria": "box archive", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "box open", + "aria": "box open", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "boxes packing", + "aria": "boxes packing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "caravan", + "aria": "caravan", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "couch", + "aria": "couch", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "dolly", + "aria": "dolly", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "house chimney", + "aria": "house chimney", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "people carry box", + "aria": "people carry box", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "route", + "aria": "route", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "sign hanging", + "aria": "sign hanging", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "suitcase", + "aria": "suitcase", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "tape", + "aria": "tape", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "trailer", + "aria": "trailer", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "truck moving", + "aria": "truck moving", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "truck ramp box", + "aria": "truck ramp box", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "移动", + "name": "wine glass", + "aria": "wine glass", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "compact disc", + "aria": "compact disc", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "drum", + "aria": "drum", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "drum steelpan", + "aria": "drum steelpan", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "file audio", + "aria": "file audio", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "file audio", + "aria": "file audio", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "guitar", + "aria": "guitar", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "headphones", + "aria": "headphones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "headphones simple", + "aria": "headphones simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "microphone", + "aria": "microphone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "microphone lines", + "aria": "microphone lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "microphone lines slash", + "aria": "microphone lines slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "microphone slash", + "aria": "microphone slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "music", + "aria": "music", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "napster", + "aria": "napster", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "radio", + "aria": "radio", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "record vinyl", + "aria": "record vinyl", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "sliders", + "aria": "sliders", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "soundcloud", + "aria": "soundcloud", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "spotify", + "aria": "spotify", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "volume high", + "aria": "volume high", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "volume low", + "aria": "volume low", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "volume off", + "aria": "volume off", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "音乐和音频", + "name": "volume xmark", + "aria": "volume xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "accessible icon", + "aria": "accessible icon", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "address book", + "aria": "address book", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "address book", + "aria": "address book", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "address card", + "aria": "address card", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "address card", + "aria": "address card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "arrows down to people", + "aria": "arrows down to people", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "baby", + "aria": "baby", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "bed", + "aria": "bed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "chalkboard user", + "aria": "chalkboard user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "child", + "aria": "child", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "child dress", + "aria": "child dress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "child reaching", + "aria": "child reaching", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "children", + "aria": "children", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "circle user", + "aria": "circle user", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "circle user", + "aria": "circle user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "clipboard user", + "aria": "clipboard user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "elevator", + "aria": "elevator", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "face frown", + "aria": "face frown", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "face frown", + "aria": "face frown", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "face meh", + "aria": "face meh", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "face meh", + "aria": "face meh", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "face smile", + "aria": "face smile", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "face smile", + "aria": "face smile", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "head side cough", + "aria": "head side cough", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "head side cough slash", + "aria": "head side cough slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "head side mask", + "aria": "head side mask", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "head side virus", + "aria": "head side virus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "hospital user", + "aria": "hospital user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "hot tub person", + "aria": "hot tub person", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "house chimney user", + "aria": "house chimney user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "house user", + "aria": "house user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "id badge", + "aria": "id badge", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "id badge", + "aria": "id badge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "id card", + "aria": "id card", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "id card", + "aria": "id card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "id card clip", + "aria": "id card clip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "image portrait", + "aria": "image portrait", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "mars and venus burst", + "aria": "mars and venus burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "people arrows", + "aria": "people arrows", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "people carry box", + "aria": "people carry box", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "people group", + "aria": "people group", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "people line", + "aria": "people line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "people pulling", + "aria": "people pulling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "people robbery", + "aria": "people robbery", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "people roof", + "aria": "people roof", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person", + "aria": "person", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person arrow down to line", + "aria": "person arrow down to line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person arrow up from line", + "aria": "person arrow up from line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person biking", + "aria": "person biking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person booth", + "aria": "person booth", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person breastfeeding", + "aria": "person breastfeeding", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person burst", + "aria": "person burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person cane", + "aria": "person cane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person chalkboard", + "aria": "person chalkboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person circle check", + "aria": "person circle check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person circle exclamation", + "aria": "person circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person circle minus", + "aria": "person circle minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person circle plus", + "aria": "person circle plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person circle question", + "aria": "person circle question", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person circle xmark", + "aria": "person circle xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person digging", + "aria": "person digging", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person dots from line", + "aria": "person dots from line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person dress", + "aria": "person dress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person dress burst", + "aria": "person dress burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person drowning", + "aria": "person drowning", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person falling", + "aria": "person falling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person falling burst", + "aria": "person falling burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person half dress", + "aria": "person half dress", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person harassing", + "aria": "person harassing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person hiking", + "aria": "person hiking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person military pointing", + "aria": "person military pointing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person military rifle", + "aria": "person military rifle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person military to person", + "aria": "person military to person", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person praying", + "aria": "person praying", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person pregnant", + "aria": "person pregnant", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person rays", + "aria": "person rays", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person rifle", + "aria": "person rifle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person running", + "aria": "person running", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person shelter", + "aria": "person shelter", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person skating", + "aria": "person skating", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person skiing", + "aria": "person skiing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person skiing nordic", + "aria": "person skiing nordic", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person snowboarding", + "aria": "person snowboarding", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person swimming", + "aria": "person swimming", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person through window", + "aria": "person through window", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person walking", + "aria": "person walking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person walking arrow loop left", + "aria": "person walking arrow loop left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person walking arrow right", + "aria": "person walking arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person walking dashed line arrow right", + "aria": "person walking dashed line arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person walking luggage", + "aria": "person walking luggage", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "person walking with cane", + "aria": "person walking with cane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "poo", + "aria": "poo", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "restroom", + "aria": "restroom", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "skull", + "aria": "skull", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "square person confined", + "aria": "square person confined", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "street view", + "aria": "street view", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user", + "aria": "user", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user", + "aria": "user", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user astronaut", + "aria": "user astronaut", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user check", + "aria": "user check", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user clock", + "aria": "user clock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user doctor", + "aria": "user doctor", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user gear", + "aria": "user gear", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user graduate", + "aria": "user graduate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user group", + "aria": "user group", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user injured", + "aria": "user injured", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user large", + "aria": "user large", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user large slash", + "aria": "user large slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user lock", + "aria": "user lock", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user minus", + "aria": "user minus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user ninja", + "aria": "user ninja", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user nurse", + "aria": "user nurse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user pen", + "aria": "user pen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user plus", + "aria": "user plus", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user secret", + "aria": "user secret", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user shield", + "aria": "user shield", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user slash", + "aria": "user slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user tag", + "aria": "user tag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user tie", + "aria": "user tie", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "user xmark", + "aria": "user xmark", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "users", + "aria": "users", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "users between lines", + "aria": "users between lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "users gear", + "aria": "users gear", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "users line", + "aria": "users line", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "users rays", + "aria": "users rays", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "users rectangle", + "aria": "users rectangle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "users slash", + "aria": "users slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "users viewfinder", + "aria": "users viewfinder", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "wheelchair", + "aria": "wheelchair", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "用户和人群", + "name": "wheelchair move", + "aria": "wheelchair move", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "book skull", + "aria": "book skull", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess", + "aria": "chess", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess bishop", + "aria": "chess bishop", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess bishop", + "aria": "chess bishop", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess board", + "aria": "chess board", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess king", + "aria": "chess king", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess king", + "aria": "chess king", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess knight", + "aria": "chess knight", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess knight", + "aria": "chess knight", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess pawn", + "aria": "chess pawn", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess pawn", + "aria": "chess pawn", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess queen", + "aria": "chess queen", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess queen", + "aria": "chess queen", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess rook", + "aria": "chess rook", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "chess rook", + "aria": "chess rook", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "critical role", + "aria": "critical role", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "d and d", + "aria": "d and d", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "d and d beyond", + "aria": "d and d beyond", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "diamond", + "aria": "diamond", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dice", + "aria": "dice", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dice d20", + "aria": "dice d20", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dice d6", + "aria": "dice d6", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dice five", + "aria": "dice five", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dice four", + "aria": "dice four", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dice one", + "aria": "dice one", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dice six", + "aria": "dice six", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dice three", + "aria": "dice three", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dice two", + "aria": "dice two", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dragon", + "aria": "dragon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "dungeon", + "aria": "dungeon", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "fantasy flight games", + "aria": "fantasy flight games", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "gamepad", + "aria": "gamepad", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "ghost", + "aria": "ghost", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "hand fist", + "aria": "hand fist", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "hat wizard", + "aria": "hat wizard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "headset", + "aria": "headset", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "playstation", + "aria": "playstation", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "puzzle piece", + "aria": "puzzle piece", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "ring", + "aria": "ring", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "scroll", + "aria": "scroll", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "shield halved", + "aria": "shield halved", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "skull crossbones", + "aria": "skull crossbones", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "square full", + "aria": "square full", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "square full", + "aria": "square full", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "square steam", + "aria": "square steam", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "steam", + "aria": "steam", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "steam symbol", + "aria": "steam symbol", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "twitch", + "aria": "twitch", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "vr cardboard", + "aria": "vr cardboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "wand sparkles", + "aria": "wand sparkles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "wizards of the coast", + "aria": "wizards of the coast", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "游戏", + "name": "xbox", + "aria": "xbox", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "baseball", + "aria": "baseball", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "baseball bat ball", + "aria": "baseball bat ball", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "basketball", + "aria": "basketball", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "bicycle", + "aria": "bicycle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "bowling ball", + "aria": "bowling ball", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "broom ball", + "aria": "broom ball", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "dumbbell", + "aria": "dumbbell", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "fire flame curved", + "aria": "fire flame curved", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "fire flame simple", + "aria": "fire flame simple", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "football", + "aria": "football", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "futbol", + "aria": "futbol", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "futbol", + "aria": "futbol", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "golf ball tee", + "aria": "golf ball tee", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "heart", + "aria": "heart", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "heart pulse", + "aria": "heart pulse", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "hockey puck", + "aria": "hockey puck", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "medal", + "aria": "medal", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "mound", + "aria": "mound", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "person biking", + "aria": "person biking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "person hiking", + "aria": "person hiking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "person running", + "aria": "person running", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "person skating", + "aria": "person skating", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "person skiing", + "aria": "person skiing", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "person skiing nordic", + "aria": "person skiing nordic", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "person snowboarding", + "aria": "person snowboarding", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "person swimming", + "aria": "person swimming", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "person walking", + "aria": "person walking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "ranking star", + "aria": "ranking star", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "shoe prints", + "aria": "shoe prints", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "spa", + "aria": "spa", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "stopwatch 20", + "aria": "stopwatch 20", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "table tennis paddle ball", + "aria": "table tennis paddle ball", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "volleyball", + "aria": "volleyball", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "运动和健身", + "name": "weight hanging", + "aria": "weight hanging", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "biohazard", + "aria": "biohazard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "bugs", + "aria": "bugs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "burst", + "aria": "burst", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "child combatant", + "aria": "child combatant", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "circle radiation", + "aria": "circle radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "cloud bolt", + "aria": "cloud bolt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "cloud showers heavy", + "aria": "cloud showers heavy", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "cloud showers water", + "aria": "cloud showers water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "helmet un", + "aria": "helmet un", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "hill avalanche", + "aria": "hill avalanche", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "hill rockslide", + "aria": "hill rockslide", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "house chimney crack", + "aria": "house chimney crack", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "house crack", + "aria": "house crack", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "house fire", + "aria": "house fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "house flood water", + "aria": "house flood water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "house flood water circle arrow right", + "aria": "house flood water circle arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "house tsunami", + "aria": "house tsunami", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "hurricane", + "aria": "hurricane", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "locust", + "aria": "locust", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "mosquito", + "aria": "mosquito", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "person drowning", + "aria": "person drowning", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "person rifle", + "aria": "person rifle", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "person walking arrow loop left", + "aria": "person walking arrow loop left", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "person walking arrow right", + "aria": "person walking arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "person walking dashed line arrow right", + "aria": "person walking dashed line arrow right", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "plant wilt", + "aria": "plant wilt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "radiation", + "aria": "radiation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "snowflake", + "aria": "snowflake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "sun plant wilt", + "aria": "sun plant wilt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "temperature arrow down", + "aria": "temperature arrow down", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "temperature arrow up", + "aria": "temperature arrow up", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "tornado", + "aria": "tornado", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "volcano", + "aria": "volcano", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "wheat awn circle exclamation", + "aria": "wheat awn circle exclamation", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "wind", + "aria": "wind", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "worm", + "aria": "worm", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "灾难和危机", + "name": "xmarks lines", + "aria": "xmarks lines", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "bolt", + "aria": "bolt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "bolt lightning", + "aria": "bolt lightning", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "camera", + "aria": "camera", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "camera retro", + "aria": "camera retro", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "camera rotate", + "aria": "camera rotate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "chalkboard", + "aria": "chalkboard", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "circle half stroke", + "aria": "circle half stroke", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "clone", + "aria": "clone", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "clone", + "aria": "clone", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "droplet", + "aria": "droplet", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "eye", + "aria": "eye", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "eye dropper", + "aria": "eye dropper", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "eye slash", + "aria": "eye slash", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "file image", + "aria": "file image", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "file image", + "aria": "file image", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "film", + "aria": "film", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "id badge", + "aria": "id badge", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "id badge", + "aria": "id badge", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "id card", + "aria": "id card", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "id card", + "aria": "id card", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "image", + "aria": "image", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "image", + "aria": "image", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "image portrait", + "aria": "image portrait", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "images", + "aria": "images", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "images", + "aria": "images", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "minimize", + "aria": "minimize", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "panorama", + "aria": "panorama", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "photo film", + "aria": "photo film", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "sliders", + "aria": "sliders", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "照片和图片", + "name": "unsplash", + "aria": "unsplash", + "glyph": "", + "className": "fab", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "award", + "aria": "award", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "building flag", + "aria": "building flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "bullhorn", + "aria": "bullhorn", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "check double", + "aria": "check double", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "check to slot", + "aria": "check to slot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "circle dollar to slot", + "aria": "circle dollar to slot", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "democrat", + "aria": "democrat", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "dove", + "aria": "dove", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "dumpster fire", + "aria": "dumpster fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "flag usa", + "aria": "flag usa", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "hand fist", + "aria": "hand fist", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "handshake", + "aria": "handshake", + "glyph": "", + "className": "far", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "handshake", + "aria": "handshake", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "landmark dome", + "aria": "landmark dome", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "landmark flag", + "aria": "landmark flag", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "person booth", + "aria": "person booth", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "piggy bank", + "aria": "piggy bank", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "republican", + "aria": "republican", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "scale balanced", + "aria": "scale balanced", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "scale unbalanced", + "aria": "scale unbalanced", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "政治", + "name": "scale unbalanced flip", + "aria": "scale unbalanced flip", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "a", + "aria": "a", + "glyph": "A", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "b", + "aria": "b", + "glyph": "B", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "c", + "aria": "c", + "glyph": "C", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "circle h", + "aria": "circle h", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "d", + "aria": "d", + "glyph": "D", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "e", + "aria": "e", + "glyph": "E", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "f", + "aria": "f", + "glyph": "F", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "g", + "aria": "g", + "glyph": "G", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "h", + "aria": "h", + "glyph": "H", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "i", + "aria": "i", + "glyph": "I", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "j", + "aria": "j", + "glyph": "J", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "k", + "aria": "k", + "glyph": "K", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "l", + "aria": "l", + "glyph": "L", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "m", + "aria": "m", + "glyph": "M", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "n", + "aria": "n", + "glyph": "N", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "o", + "aria": "o", + "glyph": "O", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "p", + "aria": "p", + "glyph": "P", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "q", + "aria": "q", + "glyph": "Q", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "r", + "aria": "r", + "glyph": "R", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "s", + "aria": "s", + "glyph": "S", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "square h", + "aria": "square h", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "t", + "aria": "t", + "glyph": "T", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "u", + "aria": "u", + "glyph": "U", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "v", + "aria": "v", + "glyph": "V", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "w", + "aria": "w", + "glyph": "W", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "x", + "aria": "x", + "glyph": "X", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "y", + "aria": "y", + "glyph": "Y", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "字母", + "name": "z", + "aria": "z", + "glyph": "Z", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "binoculars", + "aria": "binoculars", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "bug", + "aria": "bug", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "bugs", + "aria": "bugs", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "cannabis", + "aria": "cannabis", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "cloud sun", + "aria": "cloud sun", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "clover", + "aria": "clover", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "feather", + "aria": "feather", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "feather pointed", + "aria": "feather pointed", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "fire", + "aria": "fire", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "frog", + "aria": "frog", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "icicles", + "aria": "icicles", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "leaf", + "aria": "leaf", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "locust", + "aria": "locust", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "mosquito", + "aria": "mosquito", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "mound", + "aria": "mound", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "mountain", + "aria": "mountain", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "mountain city", + "aria": "mountain city", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "mountain sun", + "aria": "mountain sun", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "person hiking", + "aria": "person hiking", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "plant wilt", + "aria": "plant wilt", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "seedling", + "aria": "seedling", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "signs post", + "aria": "signs post", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "spider", + "aria": "spider", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "tree", + "aria": "tree", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "volcano", + "aria": "volcano", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "water", + "aria": "water", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "wind", + "aria": "wind", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "自然", + "name": "worm", + "aria": "worm", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "ankh", + "aria": "ankh", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "atom", + "aria": "atom", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "bahai", + "aria": "bahai", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "book bible", + "aria": "book bible", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "book journal whills", + "aria": "book journal whills", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "book quran", + "aria": "book quran", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "book tanakh", + "aria": "book tanakh", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "church", + "aria": "church", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "cross", + "aria": "cross", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "dharmachakra", + "aria": "dharmachakra", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "dove", + "aria": "dove", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "gopuram", + "aria": "gopuram", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "hamsa", + "aria": "hamsa", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "hands praying", + "aria": "hands praying", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "hanukiah", + "aria": "hanukiah", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "jedi", + "aria": "jedi", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "kaaba", + "aria": "kaaba", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "khanda", + "aria": "khanda", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "menorah", + "aria": "menorah", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "mosque", + "aria": "mosque", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "om", + "aria": "om", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "peace", + "aria": "peace", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "person praying", + "aria": "person praying", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "place of worship", + "aria": "place of worship", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "scroll torah", + "aria": "scroll torah", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "spaghetti monster flying", + "aria": "spaghetti monster flying", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "star and crescent", + "aria": "star and crescent", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "star of david", + "aria": "star of david", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "synagogue", + "aria": "synagogue", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "torii gate", + "aria": "torii gate", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "vihara", + "aria": "vihara", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + }, + { + "category": "宗教", + "name": "yin yang", + "aria": "yin yang", + "glyph": "", + "className": "fas", + "firstSeenScrollTop": 14708 + } + ], + "visitedScreens": [ + { + "step": 0, + "scrollTop": 0, + "scrollHeight": 446, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母" + ] + }, + { + "step": 1, + "scrollTop": 156, + "scrollHeight": 1232, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学" + ] + }, + { + "step": 2, + "scrollTop": 364, + "scrollHeight": 1232, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学" + ] + }, + { + "step": 3, + "scrollTop": 572, + "scrollHeight": 1232, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学" + ] + }, + { + "step": 4, + "scrollTop": 780, + "scrollHeight": 1232, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学" + ] + }, + { + "step": 5, + "scrollTop": 942, + "scrollHeight": 2270, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务" + ] + }, + { + "step": 6, + "scrollTop": 1150, + "scrollHeight": 2270, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务" + ] + }, + { + "step": 7, + "scrollTop": 1358, + "scrollHeight": 2270, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务" + ] + }, + { + "step": 8, + "scrollTop": 1566, + "scrollHeight": 2270, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务" + ] + }, + { + "step": 9, + "scrollTop": 1774, + "scrollHeight": 2270, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务" + ] + }, + { + "step": 10, + "scrollTop": 1980, + "scrollHeight": 2732, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表" + ] + }, + { + "step": 11, + "scrollTop": 2188, + "scrollHeight": 2732, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表" + ] + }, + { + "step": 12, + "scrollTop": 2396, + "scrollHeight": 2732, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表" + ] + }, + { + "step": 13, + "scrollTop": 2442, + "scrollHeight": 3266, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码" + ] + }, + { + "step": 14, + "scrollTop": 2650, + "scrollHeight": 3266, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码" + ] + }, + { + "step": 15, + "scrollTop": 2858, + "scrollHeight": 3266, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码" + ] + }, + { + "step": 16, + "scrollTop": 2976, + "scrollHeight": 3872, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工" + ] + }, + { + "step": 17, + "scrollTop": 3184, + "scrollHeight": 3872, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工" + ] + }, + { + "step": 18, + "scrollTop": 3392, + "scrollHeight": 3872, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工" + ] + }, + { + "step": 19, + "scrollTop": 3582, + "scrollHeight": 4658, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机" + ] + }, + { + "step": 20, + "scrollTop": 3790, + "scrollHeight": 4658, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机" + ] + }, + { + "step": 21, + "scrollTop": 3998, + "scrollHeight": 4658, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机" + ] + }, + { + "step": 22, + "scrollTop": 4206, + "scrollHeight": 4658, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机" + ] + }, + { + "step": 23, + "scrollTop": 4368, + "scrollHeight": 5372, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情" + ] + }, + { + "step": 24, + "scrollTop": 4576, + "scrollHeight": 5372, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情" + ] + }, + { + "step": 25, + "scrollTop": 4784, + "scrollHeight": 5372, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情" + ] + }, + { + "step": 26, + "scrollTop": 4992, + "scrollHeight": 5372, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情" + ] + }, + { + "step": 27, + "scrollTop": 5082, + "scrollHeight": 5978, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频" + ] + }, + { + "step": 28, + "scrollTop": 5290, + "scrollHeight": 5978, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频" + ] + }, + { + "step": 29, + "scrollTop": 5498, + "scrollHeight": 5978, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频" + ] + }, + { + "step": 30, + "scrollTop": 5688, + "scrollHeight": 6548, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏" + ] + }, + { + "step": 31, + "scrollTop": 5896, + "scrollHeight": 6548, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏" + ] + }, + { + "step": 32, + "scrollTop": 6104, + "scrollHeight": 6548, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏" + ] + }, + { + "step": 33, + "scrollTop": 6258, + "scrollHeight": 7010, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手" + ] + }, + { + "step": 34, + "scrollTop": 6466, + "scrollHeight": 7010, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手" + ] + }, + { + "step": 35, + "scrollTop": 6674, + "scrollHeight": 7010, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手" + ] + }, + { + "step": 36, + "scrollTop": 6720, + "scrollHeight": 8804, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文" + ] + }, + { + "step": 37, + "scrollTop": 6928, + "scrollHeight": 8804, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文" + ] + }, + { + "step": 38, + "scrollTop": 7136, + "scrollHeight": 8804, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文" + ] + }, + { + "step": 39, + "scrollTop": 7344, + "scrollHeight": 8804, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文" + ] + }, + { + "step": 40, + "scrollTop": 7552, + "scrollHeight": 8804, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文" + ] + }, + { + "step": 41, + "scrollTop": 7760, + "scrollHeight": 8804, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文" + ] + }, + { + "step": 42, + "scrollTop": 7968, + "scrollHeight": 8804, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文" + ] + }, + { + "step": 43, + "scrollTop": 8176, + "scrollHeight": 8804, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文" + ] + }, + { + "step": 44, + "scrollTop": 8384, + "scrollHeight": 8804, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文" + ] + }, + { + "step": 45, + "scrollTop": 8514, + "scrollHeight": 9878, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海" + ] + }, + { + "step": 46, + "scrollTop": 8722, + "scrollHeight": 9878, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海" + ] + }, + { + "step": 47, + "scrollTop": 8930, + "scrollHeight": 9878, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海" + ] + }, + { + "step": 48, + "scrollTop": 9138, + "scrollHeight": 9878, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海" + ] + }, + { + "step": 49, + "scrollTop": 9346, + "scrollHeight": 9878, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海" + ] + }, + { + "step": 50, + "scrollTop": 9554, + "scrollHeight": 9878, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海" + ] + }, + { + "step": 51, + "scrollTop": 9588, + "scrollHeight": 10376, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放" + ] + }, + { + "step": 52, + "scrollTop": 9796, + "scrollHeight": 10376, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放" + ] + }, + { + "step": 53, + "scrollTop": 10004, + "scrollHeight": 10376, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放" + ] + }, + { + "step": 54, + "scrollTop": 10086, + "scrollHeight": 11342, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动" + ] + }, + { + "step": 55, + "scrollTop": 10294, + "scrollHeight": 11342, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动" + ] + }, + { + "step": 56, + "scrollTop": 10502, + "scrollHeight": 11342, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动" + ] + }, + { + "step": 57, + "scrollTop": 10710, + "scrollHeight": 11342, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动" + ] + }, + { + "step": 58, + "scrollTop": 10918, + "scrollHeight": 11342, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动" + ] + }, + { + "step": 59, + "scrollTop": 11052, + "scrollHeight": 11768, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字" + ] + }, + { + "step": 60, + "scrollTop": 11260, + "scrollHeight": 11768, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字" + ] + }, + { + "step": 61, + "scrollTop": 11468, + "scrollHeight": 12230, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号" + ] + }, + { + "step": 62, + "scrollTop": 11676, + "scrollHeight": 12230, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号" + ] + }, + { + "step": 63, + "scrollTop": 11884, + "scrollHeight": 12230, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号" + ] + }, + { + "step": 64, + "scrollTop": 11940, + "scrollHeight": 12692, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说" + ] + }, + { + "step": 65, + "scrollTop": 12148, + "scrollHeight": 12692, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说" + ] + }, + { + "step": 66, + "scrollTop": 12356, + "scrollHeight": 12692, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说" + ] + }, + { + "step": 67, + "scrollTop": 12402, + "scrollHeight": 13514, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物" + ] + }, + { + "step": 68, + "scrollTop": 12610, + "scrollHeight": 13514, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物" + ] + }, + { + "step": 69, + "scrollTop": 12818, + "scrollHeight": 13514, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物" + ] + }, + { + "step": 70, + "scrollTop": 13026, + "scrollHeight": 13514, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物" + ] + }, + { + "step": 71, + "scrollTop": 13224, + "scrollHeight": 14048, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物", + "社交", + "旋转图标", + "运动和健身" + ] + }, + { + "step": 72, + "scrollTop": 13432, + "scrollHeight": 14048, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物", + "社交", + "旋转图标", + "运动和健身" + ] + }, + { + "step": 73, + "scrollTop": 13640, + "scrollHeight": 14048, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物", + "社交", + "旋转图标", + "运动和健身" + ] + }, + { + "step": 74, + "scrollTop": 13758, + "scrollHeight": 14582, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物", + "社交", + "旋转图标", + "运动和健身", + "文本格式", + "时间", + "切换" + ] + }, + { + "step": 75, + "scrollTop": 13966, + "scrollHeight": 14582, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物", + "社交", + "旋转图标", + "运动和健身", + "文本格式", + "时间", + "切换" + ] + }, + { + "step": 76, + "scrollTop": 14174, + "scrollHeight": 14582, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物", + "社交", + "旋转图标", + "运动和健身", + "文本格式", + "时间", + "切换" + ] + }, + { + "step": 77, + "scrollTop": 14292, + "scrollHeight": 15764, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物", + "社交", + "旋转图标", + "运动和健身", + "文本格式", + "时间", + "切换", + "交通运输", + "旅行和酒店", + "用户和人群" + ] + }, + { + "step": 78, + "scrollTop": 14500, + "scrollHeight": 15764, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物", + "社交", + "旋转图标", + "运动和健身", + "文本格式", + "时间", + "切换", + "交通运输", + "旅行和酒店", + "用户和人群" + ] + }, + { + "step": 79, + "scrollTop": 14708, + "scrollHeight": 15764, + "clientHeight": 290, + "headings": [ + "无障碍", + "警示", + "字母", + "动物", + "箭头", + "天文学", + "汽车", + "建筑物", + "商务", + "露营", + "慈善", + "图表", + "童年", + "服装", + "代码", + "通讯", + "连通性", + "建筑施工", + "设计", + "设备和硬件", + "灾难和危机", + "编辑器", + "教育", + "表情", + "能源", + "文件", + "电影和视频", + "食物和饮料", + "水果和蔬菜", + "游戏", + "性别", + "万圣节", + "手", + "假日", + "家庭", + "人文", + "后勤和物流", + "地图", + "航海", + "市场营销", + "数学计算", + "媒体播放", + "医疗和健康", + "金钱", + "移动", + "音乐和音频", + "自然", + "数字", + "照片和图片", + "政治", + "标点与符号", + "宗教", + "科学", + "科幻小说", + "安全", + "形状", + "购物", + "社交", + "旋转图标", + "运动和健身", + "文本格式", + "时间", + "切换", + "交通运输", + "旅行和酒店", + "用户和人群" + ] + } + ] +} \ No newline at end of file diff --git a/design/design/icon/wolai-icon-picker-preview.html b/design/design/icon/wolai-icon-picker-preview.html new file mode 100644 index 00000000..8f8fd22e --- /dev/null +++ b/design/design/icon/wolai-icon-picker-preview.html @@ -0,0 +1,3106 @@ + + + + +Wolai Icon Picker Capture + + + +

Wolai Icon Picker Capture

+
分类 66 个,图标 3091 个,商务分类:已抓到。
+
+
ban
安全 / fas
+
bug
安全 / fas
+
bug slash
安全 / fas
+
building lock
安全 / fas
+
building shield
安全 / fas
+
burst
安全 / fas
+
car on
安全 / fas
+
door closed
安全 / fas
+
door open
安全 / fas
+
dungeon
安全 / fas
+
explosion
安全 / fas
+
eye
安全 / far
+
eye
安全 / fas
+
eye slash
安全 / far
+
eye slash
安全 / fas
+
file contract
安全 / fas
+
file shield
安全 / fas
+
file signature
安全 / fas
+
fingerprint
安全 / fas
+
gun
安全 / fas
+
handcuffs
安全 / fas
+
hands bound
安全 / fas
+
hands holding child
安全 / fas
+
hands holding circle
安全 / fas
+
house fire
安全 / fas
+
house lock
安全 / fas
+
id badge
安全 / far
+
id badge
安全 / fas
+
id card
安全 / far
+
id card
安全 / fas
+
id card clip
安全 / fas
+
key
安全 / fas
+
land mine on
安全 / fas
+
lock
安全 / fas
+
lock open
安全 / fas
+
mars and venus burst
安全 / fas
+
mask
安全 / fas
+
passport
安全 / fas
+
people pulling
安全 / fas
+
people robbery
安全 / fas
+
person burst
安全 / fas
+
person dress burst
安全 / fas
+
person falling burst
安全 / fas
+
person harassing
安全 / fas
+
person military pointing
安全 / fas
+
person military rifle
安全 / fas
+
person military to person
安全 / fas
+
person rifle
安全 / fas
+
person shelter
安全 / fas
+
person through window
安全 / fas
+
road spikes
安全 / fas
+
shield
安全 / fas
+
shield cat
安全 / fas
+
shield dog
安全 / fas
+
shield halved
安全 / fas
+
shield heart
安全 / fas
+
skull crossbones
安全 / fas
+
square person confined
安全 / fas
+
tower observation
安全 / fas
+
unlock
安全 / fas
+
unlock keyhole
安全 / fas
+
user lock
安全 / fas
+
user secret
安全 / fas
+
user shield
安全 / fas
+
vault
安全 / fas
+
arrows rotate
编辑器 / fas
+
bandage
编辑器 / fas
+
bars
编辑器 / fas
+
brush
编辑器 / fas
+
chart simple
编辑器 / fas
+
check
编辑器 / fas
+
check double
编辑器 / fas
+
circle check
编辑器 / far
+
circle check
编辑器 / fas
+
circle half stroke
编辑器 / fas
+
crop
编辑器 / fas
+
crop simple
编辑器 / fas
+
cube
编辑器 / fas
+
delete left
编辑器 / fas
+
drag handle
编辑器 / fab
+
ellipsis
编辑器 / fas
+
ellipsis vertical
编辑器 / fas
+
eye dropper
编辑器 / fas
+
eye slash
编辑器 / far
+
eye slash
编辑器 / fas
+
grip
编辑器 / fas
+
grip lines
编辑器 / fas
+
grip lines vertical
编辑器 / fas
+
grip vertical
编辑器 / fas
+
link
编辑器 / fas
+
link slash
编辑器 / fas
+
minus
编辑器 / fas
+
paintbrush
编辑器 / fas
+
pen
编辑器 / fas
+
pen clip
编辑器 / fas
+
pen fancy
编辑器 / fas
+
pen nib
编辑器 / fas
+
pen ruler
编辑器 / fas
+
pen to square
编辑器 / far
+
pen to square
编辑器 / fas
+
pencil
编辑器 / fas
+
+
plus
编辑器 / fas
+
rotate
编辑器 / fas
+
scissors
编辑器 / fas
+
signature
编辑器 / fas
+
sliders
编辑器 / fas
+
square check
编辑器 / far
+
square check
编辑器 / fas
+
square pen
编辑器 / fas
+
trash
编辑器 / fas
+
trash arrow up
编辑器 / fas
+
trash can
编辑器 / far
+
trash can
编辑器 / fas
+
trash can arrow up
编辑器 / fas
+
wand magic
编辑器 / fas
+
wand magic sparkles
编辑器 / fas
+
xmark
编辑器 / fas
+
*
asterisk
标点与符号 / fas
+
@
at
标点与符号 / fas
+
check
标点与符号 / fas
+
check double
标点与符号 / fas
+
circle exclamation
标点与符号 / fas
+
circle question
标点与符号 / far
+
circle question
标点与符号 / fas
+
=
equals
标点与符号 / fas
+
!
exclamation
标点与符号 / fas
+
>
greater than
标点与符号 / fas
+
#
hashtag
标点与符号 / fas
+
<
less than
标点与符号 / fas
+
minus
标点与符号 / fas
+
%
percent
标点与符号 / fas
+
+
plus
标点与符号 / fas
+
?
question
标点与符号 / fas
+
quote left
标点与符号 / fas
+
quote right
标点与符号 / fas
+
section
标点与符号 / fas
+
face angry
表情 / far
+
face angry
表情 / fas
+
face dizzy
表情 / far
+
face dizzy
表情 / fas
+
face flushed
表情 / far
+
face flushed
表情 / fas
+
face frown
表情 / far
+
face frown
表情 / fas
+
face frown open
表情 / far
+
face frown open
表情 / fas
+
face grimace
表情 / far
+
face grimace
表情 / fas
+
face grin
表情 / far
+
face grin
表情 / fas
+
face grin beam
表情 / far
+
face grin beam
表情 / fas
+
face grin beam sweat
表情 / far
+
face grin beam sweat
表情 / fas
+
face grin hearts
表情 / far
+
face grin hearts
表情 / fas
+
face grin squint
表情 / far
+
face grin squint
表情 / fas
+
face grin squint tears
表情 / far
+
face grin squint tears
表情 / fas
+
face grin stars
表情 / far
+
face grin stars
表情 / fas
+
face grin tears
表情 / far
+
face grin tears
表情 / fas
+
face grin tongue
表情 / far
+
face grin tongue
表情 / fas
+
face grin tongue squint
表情 / far
+
face grin tongue squint
表情 / fas
+
face grin tongue wink
表情 / far
+
face grin tongue wink
表情 / fas
+
face grin wide
表情 / far
+
face grin wide
表情 / fas
+
face grin wink
表情 / far
+
face grin wink
表情 / fas
+
face kiss
表情 / far
+
face kiss
表情 / fas
+
face kiss beam
表情 / far
+
face kiss beam
表情 / fas
+
face kiss wink heart
表情 / far
+
face kiss wink heart
表情 / fas
+
face laugh
表情 / far
+
face laugh
表情 / fas
+
face laugh beam
表情 / far
+
face laugh beam
表情 / fas
+
face laugh squint
表情 / far
+
face laugh squint
表情 / fas
+
face laugh wink
表情 / far
+
face laugh wink
表情 / fas
+
face meh
表情 / far
+
face meh
表情 / fas
+
face meh blank
表情 / far
+
face meh blank
表情 / fas
+
face rolling eyes
表情 / far
+
face rolling eyes
表情 / fas
+
face sad cry
表情 / far
+
face sad cry
表情 / fas
+
face sad tear
表情 / far
+
face sad tear
表情 / fas
+
face smile
表情 / far
+
face smile
表情 / fas
+
face smile beam
表情 / far
+
face smile beam
表情 / fas
+
face smile wink
表情 / far
+
face smile wink
表情 / fas
+
face surprise
表情 / far
+
face surprise
表情 / fas
+
face tired
表情 / far
+
face tired
表情 / fas
+
circle dollar to slot
慈善 / fas
+
$
dollar sign
慈善 / fas
+
dove
慈善 / fas
+
gift
慈善 / fas
+
globe
慈善 / fas
+
hand holding dollar
慈善 / fas
+
hand holding droplet
慈善 / fas
+
hand holding hand
慈善 / fas
+
hand holding heart
慈善 / fas
+
hands holding child
慈善 / fas
+
hands holding circle
慈善 / fas
+
handshake
慈善 / far
+
handshake
慈善 / fas
+
handshake angle
慈善 / fas
+
handshake simple
慈善 / fas
+
heart
慈善 / far
+
heart
慈善 / fas
+
leaf
慈善 / fas
+
parachute box
慈善 / fas
+
piggy bank
慈善 / fas
+
ribbon
慈善 / fas
+
seedling
慈善 / fas
+
barcode
代码 / fas
+
bars
代码 / fas
+
bars staggered
代码 / fas
+
bath
代码 / fas
+
box archive
代码 / fas
+
bug
代码 / fas
+
bug slash
代码 / fas
+
circle nodes
代码 / fas
+
code
代码 / fas
+
code branch
代码 / fas
+
code commit
代码 / fas
+
code compare
代码 / fas
+
code fork
代码 / fas
+
code merge
代码 / fas
+
code pull request
代码 / fas
+
cube
代码 / fas
+
cubes
代码 / fas
+
diagram project
代码 / fas
+
file
代码 / far
+
file
代码 / fas
+
file code
代码 / far
+
file code
代码 / fas
+
file lines
代码 / far
+
file lines
代码 / fas
+
filter
代码 / fas
+
fire extinguisher
代码 / fas
+
folder
代码 / far
+
folder
代码 / fas
+
folder open
代码 / far
+
folder open
代码 / fas
+
font awesome
代码 / fab
+
font awesome
代码 / far
+
font awesome
代码 / fas
+
gears
代码 / fas
+
keyboard
代码 / far
+
keyboard
代码 / fas
+
laptop code
代码 / fas
+
microchip
代码 / fas
+
mug saucer
代码 / fas
+
network wired
代码 / fas
+
notdef
代码 / fas
+
qrcode
代码 / fas
+
rectangle xmark
代码 / far
+
rectangle xmark
代码 / fas
+
shield
代码 / fas
+
shield halved
代码 / fas
+
sitemap
代码 / fas
+
terminal
代码 / fas
+
user secret
代码 / fas
+
window maximize
代码 / far
+
window maximize
代码 / fas
+
window minimize
代码 / far
+
window minimize
代码 / fas
+
window restore
代码 / far
+
window restore
代码 / fas
+
anchor
地图 / fas
+
bag shopping
地图 / fas
+
basket shopping
地图 / fas
+
bath
地图 / fas
+
bed
地图 / fas
+
beer mug empty
地图 / fas
+
bell
地图 / far
+
bell
地图 / fas
+
bell slash
地图 / far
+
bell slash
地图 / fas
+
bicycle
地图 / fas
+
binoculars
地图 / fas
+
bomb
地图 / fas
+
book
地图 / fas
+
book atlas
地图 / fas
+
bookmark
地图 / far
+
bookmark
地图 / fas
+
bridge
地图 / fas
+
bridge water
地图 / fas
+
briefcase
地图 / fas
+
building
地图 / far
+
building
地图 / fas
+
building columns
地图 / fas
+
cake candles
地图 / fas
+
car
地图 / fas
+
cart shopping
地图 / fas
+
circle info
地图 / fas
+
crosshairs
地图 / fas
+
diamond turn right
地图 / fas
+
$
dollar sign
地图 / fas
+
draw polygon
地图 / fas
+
droplet
地图 / fas
+
eye
地图 / far
+
eye
地图 / fas
+
eye low vision
地图 / fas
+
eye slash
地图 / far
+
eye slash
地图 / fas
+
fire
地图 / fas
+
fire extinguisher
地图 / fas
+
fire flame curved
地图 / fas
+
flag
地图 / far
+
flag
地图 / fas
+
flag checkered
地图 / fas
+
flask
地图 / fas
+
gamepad
地图 / fas
+
gavel
地图 / fas
+
gift
地图 / fas
+
globe
地图 / fas
+
graduation cap
地图 / fas
+
heart
地图 / far
+
heart
地图 / fas
+
heart pulse
地图 / fas
+
helicopter
地图 / fas
+
helicopter symbol
地图 / fas
+
hospital
地图 / far
+
hospital
地图 / fas
+
house
地图 / fas
+
image
地图 / far
+
image
地图 / fas
+
images
地图 / far
+
images
地图 / fas
+
industry
地图 / fas
+
info
地图 / fas
+
jet fighter
地图 / fas
+
key
地图 / fas
+
landmark
地图 / fas
+
landmark flag
地图 / fas
+
layer group
地图 / fas
+
leaf
地图 / fas
+
lemon
地图 / far
+
lemon
地图 / fas
+
life ring
地图 / far
+
life ring
地图 / fas
+
lightbulb
地图 / far
+
lightbulb
地图 / fas
+
location arrow
地图 / fas
+
location crosshairs
地图 / fas
+
location dot
地图 / fas
+
location pin
地图 / fas
+
location pin lock
地图 / fas
+
magnet
地图 / fas
+
magnifying glass
地图 / fas
+
magnifying glass minus
地图 / fas
+
magnifying glass plus
地图 / fas
+
map
地图 / far
+
map
地图 / fas
+
map pin
地图 / fas
+
martini glass empty
地图 / fas
+
money bill
地图 / fas
+
money bill 1
地图 / far
+
money bill 1
地图 / fas
+
motorcycle
地图 / fas
+
mountain sun
地图 / fas
+
mug saucer
地图 / fas
+
music
地图 / fas
+
newspaper
地图 / far
+
newspaper
地图 / fas
+
paw
地图 / fas
+
person
地图 / fas
+
person walking with cane
地图 / fas
+
phone
地图 / fas
+
phone flip
地图 / fas
+
phone volume
地图 / fas
+
plane
地图 / fas
+
plug
地图 / fas
+
+
plus
地图 / fas
+
print
地图 / fas
+
recycle
地图 / fas
+
restroom
地图 / fas
+
road
地图 / fas
+
rocket
地图 / fas
+
route
地图 / fas
+
scale balanced
地图 / fas
+
scale unbalanced
地图 / fas
+
scale unbalanced flip
地图 / fas
+
ship
地图 / fas
+
shoe prints
地图 / fas
+
shower
地图 / fas
+
signs post
地图 / fas
+
snowplow
地图 / fas
+
spoon
地图 / fas
+
square h
地图 / fas
+
square parking
地图 / fas
+
square phone
地图 / fas
+
square phone flip
地图 / fas
+
square plus
地图 / far
+
square plus
地图 / fas
+
street view
地图 / fas
+
suitcase
地图 / fas
+
suitcase medical
地图 / fas
+
tag
地图 / fas
+
tags
地图 / fas
+
taxi
地图 / fas
+
thumbtack
地图 / fas
+
ticket
地图 / fas
+
ticket simple
地图 / fas
+
traffic light
地图 / fas
+
train
地图 / fas
+
train subway
地图 / fas
+
train tram
地图 / fas
+
tree
地图 / fas
+
trophy
地图 / fas
+
truck
地图 / fas
+
truck medical
地图 / fas
+
tty
地图 / fas
+
umbrella
地图 / fas
+
utensils
地图 / fas
+
vest
地图 / fas
+
vest patches
地图 / fas
+
wheelchair
地图 / fas
+
wheelchair move
地图 / fas
+
wifi
地图 / fas
+
wine glass
地图 / fas
+
wrench
地图 / fas
+
audio description
电影和视频 / fas
+
circle
电影和视频 / far
+
circle
电影和视频 / fas
+
clapperboard
电影和视频 / fas
+
closed captioning
电影和视频 / far
+
closed captioning
电影和视频 / fas
+
compact disc
电影和视频 / fas
+
file audio
电影和视频 / far
+
file audio
电影和视频 / fas
+
file video
电影和视频 / far
+
file video
电影和视频 / fas
+
film
电影和视频 / fas
+
headphones
电影和视频 / fas
+
microphone
电影和视频 / fas
+
microphone lines
电影和视频 / fas
+
microphone lines slash
电影和视频 / fas
+
microphone slash
电影和视频 / fas
+
photo film
电影和视频 / fas
+
podcast
电影和视频 / fas
+
square rss
电影和视频 / fas
+
ticket
电影和视频 / fas
+
tower broadcast
电影和视频 / fas
+
tower cell
电影和视频 / fas
+
tv
电影和视频 / fas
+
video
电影和视频 / fas
+
video slash
电影和视频 / fas
+
youtube
电影和视频 / fab
+
bugs
动物 / fas
+
cat
动物 / fas
+
cow
动物 / fas
+
crow
动物 / fas
+
dog
动物 / fas
+
dove
动物 / fas
+
dragon
动物 / fas
+
feather
动物 / fas
+
feather pointed
动物 / fas
+
fish
动物 / fas
+
fish fins
动物 / fas
+
frog
动物 / fas
+
hippo
动物 / fas
+
horse
动物 / fas
+
horse head
动物 / fas
+
kiwi bird
动物 / fas
+
locust
动物 / fas
+
mosquito
动物 / fas
+
otter
动物 / fas
+
paw
动物 / fas
+
shield cat
动物 / fas
+
shield dog
动物 / fas
+
shrimp
动物 / fas
+
spider
动物 / fas
+
worm
动物 / fas
+
glasses
服装 / fas
+
graduation cap
服装 / fas
+
hat cowboy
服装 / fas
+
hat cowboy side
服装 / fas
+
hat wizard
服装 / fas
+
mitten
服装 / fas
+
shirt
服装 / fas
+
shoe prints
服装 / fas
+
socks
服装 / fas
+
user tie
服装 / fas
+
vest
服装 / fas
+
vest patches
服装 / fas
+
alipay
购物 / fab
+
amazon pay
购物 / fab
+
apple pay
购物 / fab
+
bag shopping
购物 / fas
+
barcode
购物 / fas
+
basket shopping
购物 / fas
+
bell
购物 / far
+
bell
购物 / fas
+
bitcoin
购物 / fab
+
bookmark
购物 / far
+
bookmark
购物 / fas
+
btc
购物 / fab
+
bullhorn
购物 / fas
+
camera
购物 / fas
+
camera retro
购物 / fas
+
cart arrow down
购物 / fas
+
cart plus
购物 / fas
+
cart shopping
购物 / fas
+
cash register
购物 / fas
+
cc amazon pay
购物 / fab
+
cc amex
购物 / fab
+
cc apple pay
购物 / fab
+
cc diners club
购物 / fab
+
cc discover
购物 / fab
+
cc jcb
购物 / fab
+
cc mastercard
购物 / fab
+
cc paypal
购物 / fab
+
cc stripe
购物 / fab
+
cc visa
购物 / fab
+
certificate
购物 / fas
+
credit card
购物 / far
+
credit card
购物 / fas
+
ethereum
购物 / fab
+
gem
购物 / far
+
gem
购物 / fas
+
gift
购物 / fas
+
gifts
购物 / fas
+
google pay
购物 / fab
+
google wallet
购物 / fab
+
handshake
购物 / far
+
handshake
购物 / fas
+
heart
购物 / far
+
heart
购物 / fas
+
key
购物 / fas
+
money check
购物 / fas
+
money check dollar
购物 / fas
+
nfc directional
购物 / fab
+
nfc symbol
购物 / fab
+
paypal
购物 / fab
+
person booth
购物 / fas
+
receipt
购物 / fas
+
shirt
购物 / fas
+
shop
购物 / fas
+
shop lock
购物 / fas
+
shop slash
购物 / fas
+
star
购物 / far
+
star
购物 / fas
+
store
购物 / fas
+
store slash
购物 / fas
+
stripe
购物 / fab
+
stripe s
购物 / fab
+
tag
购物 / fas
+
tags
购物 / fas
+
thumbs down
购物 / far
+
thumbs down
购物 / fas
+
thumbs up
购物 / far
+
thumbs up
购物 / fas
+
trophy
购物 / fas
+
truck
购物 / fas
+
truck fast
购物 / fas
+
anchor
航海 / fas
+
anchor circle check
航海 / fas
+
anchor circle exclamation
航海 / fas
+
anchor circle xmark
航海 / fas
+
anchor lock
航海 / fas
+
ferry
航海 / fas
+
fish
航海 / fas
+
fish fins
航海 / fas
+
otter
航海 / fas
+
person swimming
航海 / fas
+
sailboat
航海 / fas
+
ship
航海 / fas
+
shrimp
航海 / fas
+
water
航海 / fas
+
anchor
后勤和物流 / fas
+
anchor circle check
后勤和物流 / fas
+
anchor circle exclamation
后勤和物流 / fas
+
anchor circle xmark
后勤和物流 / fas
+
anchor lock
后勤和物流 / fas
+
box
后勤和物流 / fas
+
boxes packing
后勤和物流 / fas
+
boxes stacked
后勤和物流 / fas
+
bridge
后勤和物流 / fas
+
bridge circle check
后勤和物流 / fas
+
bridge circle exclamation
后勤和物流 / fas
+
bridge circle xmark
后勤和物流 / fas
+
bridge lock
后勤和物流 / fas
+
bridge water
后勤和物流 / fas
+
bus
后勤和物流 / fas
+
bus simple
后勤和物流 / fas
+
car
后勤和物流 / fas
+
car tunnel
后勤和物流 / fas
+
cart flatbed
后勤和物流 / fas
+
chart simple
后勤和物流 / fas
+
clipboard check
后勤和物流 / fas
+
clipboard list
后勤和物流 / fas
+
clipboard question
后勤和物流 / fas
+
dolly
后勤和物流 / fas
+
ferry
后勤和物流 / fas
+
gas pump
后勤和物流 / fas
+
gears
后勤和物流 / fas
+
helicopter
后勤和物流 / fas
+
helicopter symbol
后勤和物流 / fas
+
helmet safety
后勤和物流 / fas
+
jet fighter up
后勤和物流 / fas
+
pallet
后勤和物流 / fas
+
plane circle check
后勤和物流 / fas
+
plane circle exclamation
后勤和物流 / fas
+
plane circle xmark
后勤和物流 / fas
+
plane lock
后勤和物流 / fas
+
road
后勤和物流 / fas
+
road barrier
后勤和物流 / fas
+
road bridge
后勤和物流 / fas
+
road circle check
后勤和物流 / fas
+
road circle exclamation
后勤和物流 / fas
+
road circle xmark
后勤和物流 / fas
+
road lock
后勤和物流 / fas
+
sailboat
后勤和物流 / fas
+
square nfi
后勤和物流 / fas
+
train
后勤和物流 / fas
+
train subway
后勤和物流 / fas
+
truck
后勤和物流 / fas
+
truck arrow right
后勤和物流 / fas
+
truck fast
后勤和物流 / fas
+
truck field
后勤和物流 / fas
+
truck field un
后勤和物流 / fas
+
truck front
后勤和物流 / fas
+
truck plane
后勤和物流 / fas
+
warehouse
后勤和物流 / fas
+
xmarks lines
后勤和物流 / fas
+
arrow up from water pump
家庭 / fas
+
bath
家庭 / fas
+
bed
家庭 / fas
+
bell
家庭 / far
+
bell
家庭 / fas
+
blender
家庭 / fas
+
box tissue
家庭 / fas
+
chair
家庭 / fas
+
computer
家庭 / fas
+
couch
家庭 / fas
+
door closed
家庭 / fas
+
door open
家庭 / fas
+
dungeon
家庭 / fas
+
fan
家庭 / fas
+
faucet
家庭 / fas
+
faucet drip
家庭 / fas
+
fire burner
家庭 / fas
+
house chimney user
家庭 / fas
+
house chimney window
家庭 / fas
+
house fire
家庭 / fas
+
house laptop
家庭 / fas
+
house lock
家庭 / fas
+
house signal
家庭 / fas
+
house user
家庭 / fas
+
jar
家庭 / fas
+
jar wheat
家庭 / fas
+
jug detergent
家庭 / fas
+
kitchen set
家庭 / fas
+
lightbulb
家庭 / far
+
lightbulb
家庭 / fas
+
mattress pillow
家庭 / fas
+
mug saucer
家庭 / fas
+
people roof
家庭 / fas
+
plug
家庭 / fas
+
pump soap
家庭 / fas
+
rug
家庭 / fas
+
sheet plastic
家庭 / fas
+
shower
家庭 / fas
+
sink
家庭 / fas
+
snowflake
家庭 / far
+
snowflake
家庭 / fas
+
soap
家庭 / fas
+
spoon
家庭 / fas
+
stairs
家庭 / fas
+
temperature arrow down
家庭 / fas
+
temperature arrow up
家庭 / fas
+
toilet
家庭 / fas
+
toilet paper
家庭 / fas
+
toilet paper slash
家庭 / fas
+
tv
家庭 / fas
+
utensils
家庭 / fas
+
candy cane
假日 / fas
+
carrot
假日 / fas
+
champagne glasses
假日 / fas
+
cookie bite
假日 / fas
+
face grin hearts
假日 / far
+
face grin hearts
假日 / fas
+
face kiss wink heart
假日 / far
+
face kiss wink heart
假日 / fas
+
gift
假日 / fas
+
gifts
假日 / fas
+
heart
假日 / far
+
heart
假日 / fas
+
holly berry
假日 / fas
+
menorah
假日 / fas
+
mug hot
假日 / fas
+
sleigh
假日 / fas
+
snowman
假日 / fas
+
arrow up from ground water
建筑施工 / fas
+
bore hole
建筑施工 / fas
+
brush
建筑施工 / fas
+
bucket
建筑施工 / fas
+
compass drafting
建筑施工 / fas
+
dumpster
建筑施工 / fas
+
dumpster fire
建筑施工 / fas
+
hammer
建筑施工 / fas
+
helmet safety
建筑施工 / fas
+
mound
建筑施工 / fas
+
paint roller
建筑施工 / fas
+
pen ruler
建筑施工 / fas
+
pencil
建筑施工 / fas
+
person digging
建筑施工 / fas
+
ruler
建筑施工 / fas
+
ruler combined
建筑施工 / fas
+
ruler horizontal
建筑施工 / fas
+
ruler vertical
建筑施工 / fas
+
screwdriver
建筑施工 / fas
+
screwdriver wrench
建筑施工 / fas
+
sheet plastic
建筑施工 / fas
+
tarp
建筑施工 / fas
+
tarp droplet
建筑施工 / fas
+
toilet portable
建筑施工 / fas
+
toilets portable
建筑施工 / fas
+
toolbox
建筑施工 / fas
+
trowel
建筑施工 / fas
+
trowel bricks
建筑施工 / fas
+
truck pickup
建筑施工 / fas
+
wrench
建筑施工 / fas
+
archway
建筑物 / fas
+
arrow right to city
建筑物 / fas
+
building
建筑物 / far
+
building
建筑物 / fas
+
building circle arrow right
建筑物 / fas
+
building circle check
建筑物 / fas
+
building circle exclamation
建筑物 / fas
+
building circle xmark
建筑物 / fas
+
building columns
建筑物 / fas
+
building flag
建筑物 / fas
+
building lock
建筑物 / fas
+
building ngo
建筑物 / fas
+
building shield
建筑物 / fas
+
building un
建筑物 / fas
+
building user
建筑物 / fas
+
building wheat
建筑物 / fas
+
campground
建筑物 / fas
+
church
建筑物 / fas
+
city
建筑物 / fas
+
dungeon
建筑物 / fas
+
gopuram
建筑物 / fas
+
hospital
建筑物 / far
+
hospital
建筑物 / fas
+
hospital user
建筑物 / fas
+
hotel
建筑物 / fas
+
house
建筑物 / fas
+
house chimney
建筑物 / fas
+
house chimney crack
建筑物 / fas
+
house chimney medical
建筑物 / fas
+
house chimney window
建筑物 / fas
+
house circle check
建筑物 / fas
+
house circle exclamation
建筑物 / fas
+
house circle xmark
建筑物 / fas
+
house crack
建筑物 / fas
+
house fire
建筑物 / fas
+
house flag
建筑物 / fas
+
house lock
建筑物 / fas
+
house medical
建筑物 / fas
+
house medical circle check
建筑物 / fas
+
house medical circle exclamation
建筑物 / fas
+
house medical circle xmark
建筑物 / fas
+
house medical flag
建筑物 / fas
+
igloo
建筑物 / fas
+
industry
建筑物 / fas
+
kaaba
建筑物 / fas
+
landmark
建筑物 / fas
+
landmark dome
建筑物 / fas
+
landmark flag
建筑物 / fas
+
monument
建筑物 / fas
+
mosque
建筑物 / fas
+
mountain city
建筑物 / fas
+
oil well
建筑物 / fas
+
place of worship
建筑物 / fas
+
school
建筑物 / fas
+
school circle check
建筑物 / fas
+
school circle exclamation
建筑物 / fas
+
school circle xmark
建筑物 / fas
+
school flag
建筑物 / fas
+
school lock
建筑物 / fas
+
shop
建筑物 / fas
+
shop lock
建筑物 / fas
+
store
建筑物 / fas
+
synagogue
建筑物 / fas
+
tent
建筑物 / fas
+
tent arrow down to line
建筑物 / fas
+
tent arrow left right
建筑物 / fas
+
tent arrow turn left
建筑物 / fas
+
tent arrows down
建筑物 / fas
+
tents
建筑物 / fas
+
toilet portable
建筑物 / fas
+
toilets portable
建筑物 / fas
+
torii gate
建筑物 / fas
+
tower observation
建筑物 / fas
+
tree city
建筑物 / fas
+
vihara
建筑物 / fas
+
warehouse
建筑物 / fas
+
angle down
箭头 / fas
+
angle left
箭头 / fas
+
angle right
箭头 / fas
+
angle up
箭头 / fas
+
angles down
箭头 / fas
+
angles left
箭头 / fas
+
angles right
箭头 / fas
+
angles up
箭头 / fas
+
arrow down
箭头 / fas
+
arrow down 1 9
箭头 / fas
+
arrow down 9 1
箭头 / fas
+
arrow down a z
箭头 / fas
+
arrow down long
箭头 / fas
+
arrow down short wide
箭头 / fas
+
arrow down up across line
箭头 / fas
+
arrow down up lock
箭头 / fas
+
arrow down wide short
箭头 / fas
+
arrow down z a
箭头 / fas
+
arrow left
箭头 / fas
+
arrow left long
箭头 / fas
+
arrow pointer
箭头 / fas
+
arrow right
箭头 / fas
+
arrow right arrow left
箭头 / fas
+
arrow right from bracket
箭头 / fas
+
arrow right long
箭头 / fas
+
arrow right to bracket
箭头 / fas
+
arrow rotate left
箭头 / fas
+
arrow rotate right
箭头 / fas
+
arrow trend down
箭头 / fas
+
arrow trend up
箭头 / fas
+
arrow turn down
箭头 / fas
+
arrow turn up
箭头 / fas
+
arrow up
箭头 / fas
+
arrow up 1 9
箭头 / fas
+
arrow up 9 1
箭头 / fas
+
arrow up a z
箭头 / fas
+
arrow up from bracket
箭头 / fas
+
arrow up long
箭头 / fas
+
arrow up right dots
箭头 / fas
+
arrow up right from square
箭头 / fas
+
arrow up short wide
箭头 / fas
+
arrow up wide short
箭头 / fas
+
arrow up z a
箭头 / fas
+
arrows down to line
箭头 / fas
+
arrows left right
箭头 / fas
+
arrows left right to line
箭头 / fas
+
arrows rotate
箭头 / fas
+
arrows spin
箭头 / fas
+
arrows split up and left
箭头 / fas
+
arrows to circle
箭头 / fas
+
arrows to dot
箭头 / fas
+
arrows to eye
箭头 / fas
+
arrows turn right
箭头 / fas
+
arrows turn to dots
箭头 / fas
+
arrows up down
箭头 / fas
+
arrows up down left right
箭头 / fas
+
arrows up to line
箭头 / fas
+
caret down
箭头 / fas
+
caret left
箭头 / fas
+
caret right
箭头 / fas
+
caret up
箭头 / fas
+
chevron down
箭头 / fas
+
chevron left
箭头 / fas
+
chevron right
箭头 / fas
+
chevron up
箭头 / fas
+
circle arrow down
箭头 / fas
+
circle arrow left
箭头 / fas
+
circle arrow right
箭头 / fas
+
circle arrow up
箭头 / fas
+
circle chevron down
箭头 / fas
+
circle chevron left
箭头 / fas
+
circle chevron right
箭头 / fas
+
circle chevron up
箭头 / fas
+
circle down
箭头 / far
+
circle down
箭头 / fas
+
circle left
箭头 / far
+
circle left
箭头 / fas
+
circle right
箭头 / far
+
circle right
箭头 / fas
+
circle up
箭头 / far
+
circle up
箭头 / fas
+
clock rotate left
箭头 / fas
+
cloud arrow down
箭头 / fas
+
cloud arrow up
箭头 / fas
+
down left and up right to center
箭头 / fas
+
down long
箭头 / fas
+
download
箭头 / fas
+
left long
箭头 / fas
+
left right
箭头 / fas
+
location arrow
箭头 / fas
+
maximize
箭头 / fas
+
recycle
箭头 / fas
+
repeat
箭头 / fas
+
reply
箭头 / fas
+
reply all
箭头 / fas
+
retweet
箭头 / fas
+
right from bracket
箭头 / fas
+
right left
箭头 / fas
+
right long
箭头 / fas
+
right to bracket
箭头 / fas
+
rotate
箭头 / fas
+
rotate left
箭头 / fas
+
rotate right
箭头 / fas
+
share
箭头 / fas
+
share from square
箭头 / far
+
share from square
箭头 / fas
+
shuffle
箭头 / fas
+
sort
箭头 / fas
+
sort down
箭头 / fas
+
sort up
箭头 / fas
+
square arrow up right
箭头 / fas
+
square caret down
箭头 / far
+
square caret down
箭头 / fas
+
square caret left
箭头 / far
+
square caret left
箭头 / fas
+
square caret right
箭头 / far
+
square caret right
箭头 / fas
+
square caret up
箭头 / far
+
square caret up
箭头 / fas
+
square up right
箭头 / fas
+
turn down
箭头 / fas
+
turn up
箭头 / fas
+
up down
箭头 / fas
+
up down left right
箭头 / fas
+
up long
箭头 / fas
+
up right and down left from center
箭头 / fas
+
up right from square
箭头 / fas
+
upload
箭头 / fas
+
accessible icon
交通运输 / fab
+
baby carriage
交通运输 / fas
+
bicycle
交通运输 / fas
+
bus
交通运输 / fas
+
bus simple
交通运输 / fas
+
cable car
交通运输 / fas
+
car
交通运输 / fas
+
car burst
交通运输 / fas
+
car rear
交通运输 / fas
+
car side
交通运输 / fas
+
car tunnel
交通运输 / fas
+
cart shopping
交通运输 / fas
+
ferry
交通运输 / fas
+
helicopter
交通运输 / fas
+
horse
交通运输 / fas
+
jet fighter
交通运输 / fas
+
jet fighter up
交通运输 / fas
+
motorcycle
交通运输 / fas
+
mound
交通运输 / fas
+
paper plane
交通运输 / far
+
paper plane
交通运输 / fas
+
plane
交通运输 / fas
+
plane slash
交通运输 / fas
+
plane up
交通运输 / fas
+
road
交通运输 / fas
+
road barrier
交通运输 / fas
+
road spikes
交通运输 / fas
+
rocket
交通运输 / fas
+
sailboat
交通运输 / fas
+
ship
交通运输 / fas
+
shuttle space
交通运输 / fas
+
sleigh
交通运输 / fas
+
snowplow
交通运输 / fas
+
taxi
交通运输 / fas
+
tractor
交通运输 / fas
+
train
交通运输 / fas
+
train subway
交通运输 / fas
+
train tram
交通运输 / fas
+
truck
交通运输 / fas
+
truck arrow right
交通运输 / fas
+
truck droplet
交通运输 / fas
+
truck field
交通运输 / fas
+
truck field un
交通运输 / fas
+
truck front
交通运输 / fas
+
truck medical
交通运输 / fas
+
truck monster
交通运输 / fas
+
truck pickup
交通运输 / fas
+
truck plane
交通运输 / fas
+
van shuttle
交通运输 / fas
+
wheelchair
交通运输 / fas
+
wheelchair move
交通运输 / fas
+
apple whole
教育 / fas
+
atom
教育 / fas
+
award
教育 / fas
+
bell
教育 / far
+
bell
教育 / fas
+
bell slash
教育 / far
+
bell slash
教育 / fas
+
book open
教育 / fas
+
book open reader
教育 / fas
+
chalkboard
教育 / fas
+
chalkboard user
教育 / fas
+
graduation cap
教育 / fas
+
laptop code
教育 / fas
+
laptop file
教育 / fas
+
masks theater
教育 / fas
+
microscope
教育 / fas
+
music
教育 / fas
+
person chalkboard
教育 / fas
+
school
教育 / fas
+
school circle check
教育 / fas
+
school circle exclamation
教育 / fas
+
school circle xmark
教育 / fas
+
school flag
教育 / fas
+
school lock
教育 / fas
+
shapes
教育 / fas
+
user graduate
教育 / fas
+
austral sign
金钱 / fas
+
baht sign
金钱 / fas
+
bangladeshi taka sign
金钱 / fas
+
bitcoin
金钱 / fab
+
bitcoin sign
金钱 / fas
+
brazilian real sign
金钱 / fas
+
btc
金钱 / fab
+
cash register
金钱 / fas
+
cedi sign
金钱 / fas
+
cent sign
金钱 / fas
+
chart line
金钱 / fas
+
chart pie
金钱 / fas
+
circle dollar to slot
金钱 / fas
+
coins
金钱 / fas
+
colon sign
金钱 / fas
+
comment dollar
金钱 / fas
+
comments dollar
金钱 / fas
+
credit card
金钱 / far
+
credit card
金钱 / fas
+
cruzeiro sign
金钱 / fas
+
$
dollar sign
金钱 / fas
+
dong sign
金钱 / fas
+
ethereum
金钱 / fab
+
euro sign
金钱 / fas
+
file invoice
金钱 / fas
+
file invoice dollar
金钱 / fas
+
florin sign
金钱 / fas
+
franc sign
金钱 / fas
+
gg
金钱 / fab
+
gg circle
金钱 / fab
+
guarani sign
金钱 / fas
+
hand holding dollar
金钱 / fas
+
hryvnia sign
金钱 / fas
+
indian rupee sign
金钱 / fas
+
kip sign
金钱 / fas
+
landmark
金钱 / fas
+
lari sign
金钱 / fas
+
lira sign
金钱 / fas
+
litecoin sign
金钱 / fas
+
manat sign
金钱 / fas
+
mill sign
金钱 / fas
+
money bill
金钱 / fas
+
money bill 1
金钱 / far
+
money bill 1
金钱 / fas
+
money bill 1 wave
金钱 / fas
+
money bill transfer
金钱 / fas
+
money bill trend up
金钱 / fas
+
money bill wave
金钱 / fas
+
money bill wheat
金钱 / fas
+
money bills
金钱 / fas
+
money check
金钱 / fas
+
money check dollar
金钱 / fas
+
naira sign
金钱 / fas
+
%
percent
金钱 / fas
+
peseta sign
金钱 / fas
+
peso sign
金钱 / fas
+
piggy bank
金钱 / fas
+
receipt
金钱 / fas
+
ruble sign
金钱 / fas
+
rupee sign
金钱 / fas
+
rupiah sign
金钱 / fas
+
sack dollar
金钱 / fas
+
sack xmark
金钱 / fas
+
scale balanced
金钱 / fas
+
scale unbalanced
金钱 / fas
+
scale unbalanced flip
金钱 / fas
+
shekel sign
金钱 / fas
+
stamp
金钱 / fas
+
sterling sign
金钱 / fas
+
tenge sign
金钱 / fas
+
turkish lira sign
金钱 / fas
+
vault
金钱 / fas
+
wallet
金钱 / fas
+
won sign
金钱 / fas
+
yen sign
金钱 / fas
+
bell
警示 / far
+
bell
警示 / fas
+
bell slash
警示 / far
+
bell slash
警示 / fas
+
circle exclamation
警示 / fas
+
circle radiation
警示 / fas
+
!
exclamation
警示 / fas
+
?
question
警示 / fas
+
radiation
警示 / fas
+
skull crossbones
警示 / fas
+
triangle exclamation
警示 / fas
+
atom
科幻小说 / fas
+
book journal whills
科幻小说 / fas
+
explosion
科幻小说 / fas
+
galactic republic
科幻小说 / fab
+
galactic senate
科幻小说 / fab
+
hand spock
科幻小说 / far
+
hand spock
科幻小说 / fas
+
jedi
科幻小说 / fas
+
jedi order
科幻小说 / fab
+
old republic
科幻小说 / fab
+
robot
科幻小说 / fas
+
rocket
科幻小说 / fas
+
space awesome
科幻小说 / fab
+
user astronaut
科幻小说 / fas
+
atom
科学 / fas
+
biohazard
科学 / fas
+
brain
科学 / fas
+
capsules
科学 / fas
+
circle radiation
科学 / fas
+
clipboard check
科学 / fas
+
disease
科学 / fas
+
dna
科学 / fas
+
eye dropper
科学 / fas
+
filter
科学 / fas
+
fire
科学 / fas
+
fire flame curved
科学 / fas
+
fire flame simple
科学 / fas
+
flask
科学 / fas
+
flask vial
科学 / fas
+
frog
科学 / fas
+
magnet
科学 / fas
+
microscope
科学 / fas
+
mortar pestle
科学 / fas
+
pills
科学 / fas
+
prescription bottle
科学 / fas
+
radiation
科学 / fas
+
seedling
科学 / fas
+
skull crossbones
科学 / fas
+
square virus
科学 / fas
+
syringe
科学 / fas
+
tablets
科学 / fas
+
temperature high
科学 / fas
+
temperature low
科学 / fas
+
vial
科学 / fas
+
vial circle check
科学 / fas
+
vial virus
科学 / fas
+
vials
科学 / fas
+
bluetooth
连通性 / fab
+
circle nodes
连通性 / fas
+
cloud
连通性 / fas
+
cloud arrow down
连通性 / fas
+
cloud arrow up
连通性 / fas
+
ethernet
连通性 / fas
+
globe
连通性 / fas
+
house signal
连通性 / fas
+
rss
连通性 / fas
+
satellite dish
连通性 / fas
+
signal
连通性 / fas
+
tower broadcast
连通性 / fas
+
tower cell
连通性 / fas
+
wifi
连通性 / fas
+
binoculars
露营 / fas
+
bottle water
露营 / fas
+
bucket
露营 / fas
+
campground
露营 / fas
+
caravan
露营 / fas
+
compass
露营 / far
+
compass
露营 / fas
+
faucet
露营 / fas
+
faucet drip
露营 / fas
+
fire
露营 / fas
+
fire burner
露营 / fas
+
fire flame curved
露营 / fas
+
frog
露营 / fas
+
kit medical
露营 / fas
+
map
露营 / far
+
map
露营 / fas
+
map location
露营 / fas
+
map location dot
露营 / fas
+
mattress pillow
露营 / fas
+
mosquito
露营 / fas
+
mosquito net
露营 / fas
+
mountain
露营 / fas
+
mountain sun
露营 / fas
+
people roof
露营 / fas
+
person hiking
露营 / fas
+
person shelter
露营 / fas
+
route
露营 / fas
+
signs post
露营 / fas
+
tarp
露营 / fas
+
tarp droplet
露营 / fas
+
tent
露营 / fas
+
tent arrow down to line
露营 / fas
+
tent arrow left right
露营 / fas
+
tent arrow turn left
露营 / fas
+
tent arrows down
露营 / fas
+
tents
露营 / fas
+
toilet paper
露营 / fas
+
trailer
露营 / fas
+
tree
露营 / fas
+
archway
旅行和酒店 / fas
+
baby carriage
旅行和酒店 / fas
+
ban smoking
旅行和酒店 / fas
+
bath
旅行和酒店 / fas
+
bed
旅行和酒店 / fas
+
bell concierge
旅行和酒店 / fas
+
book atlas
旅行和酒店 / fas
+
briefcase
旅行和酒店 / fas
+
bus
旅行和酒店 / fas
+
bus simple
旅行和酒店 / fas
+
cable car
旅行和酒店 / fas
+
car
旅行和酒店 / fas
+
caravan
旅行和酒店 / fas
+
cart flatbed suitcase
旅行和酒店 / fas
+
dice
旅行和酒店 / fas
+
dice five
旅行和酒店 / fas
+
door closed
旅行和酒店 / fas
+
door open
旅行和酒店 / fas
+
dumbbell
旅行和酒店 / fas
+
earth africa
旅行和酒店 / fas
+
earth americas
旅行和酒店 / fas
+
earth asia
旅行和酒店 / fas
+
earth europe
旅行和酒店 / fas
+
earth oceania
旅行和酒店 / fas
+
elevator
旅行和酒店 / fas
+
hot tub person
旅行和酒店 / fas
+
hotel
旅行和酒店 / fas
+
infinity
旅行和酒店 / fas
+
key
旅行和酒店 / fas
+
kitchen set
旅行和酒店 / fas
+
map
旅行和酒店 / far
+
map
旅行和酒店 / fas
+
map location
旅行和酒店 / fas
+
map location dot
旅行和酒店 / fas
+
martini glass
旅行和酒店 / fas
+
martini glass citrus
旅行和酒店 / fas
+
martini glass empty
旅行和酒店 / fas
+
monument
旅行和酒店 / fas
+
mountain city
旅行和酒店 / fas
+
mug saucer
旅行和酒店 / fas
+
passport
旅行和酒店 / fas
+
person swimming
旅行和酒店 / fas
+
person walking luggage
旅行和酒店 / fas
+
plane
旅行和酒店 / fas
+
plane arrival
旅行和酒店 / fas
+
plane circle check
旅行和酒店 / fas
+
plane circle exclamation
旅行和酒店 / fas
+
plane circle xmark
旅行和酒店 / fas
+
plane departure
旅行和酒店 / fas
+
plane lock
旅行和酒店 / fas
+
plane slash
旅行和酒店 / fas
+
plane up
旅行和酒店 / fas
+
shower
旅行和酒店 / fas
+
smoking
旅行和酒店 / fas
+
snowflake
旅行和酒店 / far
+
snowflake
旅行和酒店 / fas
+
spa
旅行和酒店 / fas
+
stairs
旅行和酒店 / fas
+
suitcase
旅行和酒店 / fas
+
suitcase rolling
旅行和酒店 / fas
+
taxi
旅行和酒店 / fas
+
toilet
旅行和酒店 / fas
+
toilet paper
旅行和酒店 / fas
+
train tram
旅行和酒店 / fas
+
tree city
旅行和酒店 / fas
+
tv
旅行和酒店 / fas
+
umbrella beach
旅行和酒店 / fas
+
utensils
旅行和酒店 / fas
+
van shuttle
旅行和酒店 / fas
+
water ladder
旅行和酒店 / fas
+
wheelchair
旅行和酒店 / fas
+
wheelchair move
旅行和酒店 / fas
+
wifi
旅行和酒店 / fas
+
wine glass
旅行和酒店 / fas
+
wine glass empty
旅行和酒店 / fas
+
arrow rotate left
媒体播放 / fas
+
arrow rotate right
媒体播放 / fas
+
arrows rotate
媒体播放 / fas
+
backward
媒体播放 / fas
+
backward fast
媒体播放 / fas
+
backward step
媒体播放 / fas
+
circle pause
媒体播放 / far
+
circle pause
媒体播放 / fas
+
circle play
媒体播放 / far
+
circle play
媒体播放 / fas
+
circle stop
媒体播放 / far
+
circle stop
媒体播放 / fas
+
compress
媒体播放 / fas
+
down left and up right to center
媒体播放 / fas
+
eject
媒体播放 / fas
+
expand
媒体播放 / fas
+
forward
媒体播放 / fas
+
forward fast
媒体播放 / fas
+
forward step
媒体播放 / fas
+
hand
媒体播放 / far
+
hand
媒体播放 / fas
+
maximize
媒体播放 / fas
+
minimize
媒体播放 / fas
+
music
媒体播放 / fas
+
pause
媒体播放 / fas
+
phone volume
媒体播放 / fas
+
play
媒体播放 / fas
+
plus minus
媒体播放 / fas
+
repeat
媒体播放 / fas
+
rotate
媒体播放 / fas
+
rotate left
媒体播放 / fas
+
rotate right
媒体播放 / fas
+
rss
媒体播放 / fas
+
shuffle
媒体播放 / fas
+
sliders
媒体播放 / fas
+
stop
媒体播放 / fas
+
up right and down left from center
媒体播放 / fas
+
volume high
媒体播放 / fas
+
volume low
媒体播放 / fas
+
volume off
媒体播放 / fas
+
volume xmark
媒体播放 / fas
+
arrow up from ground water
能源 / fas
+
atom
能源 / fas
+
battery empty
能源 / fas
+
battery full
能源 / fas
+
battery half
能源 / fas
+
battery quarter
能源 / fas
+
battery three quarters
能源 / fas
+
bolt
能源 / fas
+
car battery
能源 / fas
+
charging station
能源 / fas
+
circle radiation
能源 / fas
+
explosion
能源 / fas
+
fan
能源 / fas
+
fire
能源 / fas
+
fire flame curved
能源 / fas
+
fire flame simple
能源 / fas
+
gas pump
能源 / fas
+
industry
能源 / fas
+
leaf
能源 / fas
+
lightbulb
能源 / far
+
lightbulb
能源 / fas
+
oil well
能源 / fas
+
plug
能源 / fas
+
plug circle bolt
能源 / fas
+
plug circle check
能源 / fas
+
plug circle exclamation
能源 / fas
+
plug circle minus
能源 / fas
+
plug circle plus
能源 / fas
+
plug circle xmark
能源 / fas
+
poop
能源 / fas
+
power off
能源 / fas
+
radiation
能源 / fas
+
seedling
能源 / fas
+
solar panel
能源 / fas
+
sun
能源 / far
+
sun
能源 / fas
+
tower broadcast
能源 / fas
+
water
能源 / fas
+
wind
能源 / fas
+
bus
汽车 / fas
+
bus simple
汽车 / fas
+
car
汽车 / fas
+
car battery
汽车 / fas
+
car burst
汽车 / fas
+
car on
汽车 / fas
+
car rear
汽车 / fas
+
car side
汽车 / fas
+
car tunnel
汽车 / fas
+
caravan
汽车 / fas
+
charging station
汽车 / fas
+
gas pump
汽车 / fas
+
gauge
汽车 / fas
+
gauge high
汽车 / fas
+
gauge simple
汽车 / fas
+
gauge simple high
汽车 / fas
+
motorcycle
汽车 / fas
+
oil can
汽车 / fas
+
spray can sparkles
汽车 / fas
+
taxi
汽车 / fas
+
trailer
汽车 / fas
+
truck
汽车 / fas
+
truck field
汽车 / fas
+
truck field un
汽车 / fas
+
truck medical
汽车 / fas
+
truck monster
汽车 / fas
+
truck pickup
汽车 / fas
+
van shuttle
汽车 / fas
+
bullseye
切换 / fas
+
circle
切换 / far
+
circle
切换 / fas
+
circle check
切换 / far
+
circle check
切换 / fas
+
circle dot
切换 / far
+
circle dot
切换 / fas
+
location crosshairs
切换 / fas
+
microphone
切换 / fas
+
microphone slash
切换 / fas
+
plane up
切换 / fas
+
signal
切换 / fas
+
star
切换 / far
+
star
切换 / fas
+
star half
切换 / far
+
star half
切换 / fas
+
star half stroke
切换 / far
+
star half stroke
切换 / fas
+
toggle off
切换 / fas
+
toggle on
切换 / fas
+
wifi
切换 / fas
+
anchor
人文 / fas
+
anchor circle check
人文 / fas
+
anchor circle exclamation
人文 / fas
+
anchor circle xmark
人文 / fas
+
anchor lock
人文 / fas
+
arrow down up across line
人文 / fas
+
arrow down up lock
人文 / fas
+
arrow right to city
人文 / fas
+
arrow up from ground water
人文 / fas
+
arrow up from water pump
人文 / fas
+
arrow up right dots
人文 / fas
+
arrow up right from square
人文 / fas
+
arrows down to line
人文 / fas
+
arrows down to people
人文 / fas
+
arrows left right to line
人文 / fas
+
arrows spin
人文 / fas
+
arrows split up and left
人文 / fas
+
arrows to circle
人文 / fas
+
arrows to dot
人文 / fas
+
arrows to eye
人文 / fas
+
arrows turn right
人文 / fas
+
arrows turn to dots
人文 / fas
+
arrows up to line
人文 / fas
+
baby
人文 / fas
+
bacterium
人文 / fas
+
ban
人文 / fas
+
bed
人文 / fas
+
biohazard
人文 / fas
+
book bookmark
人文 / fas
+
bore hole
人文 / fas
+
bottle droplet
人文 / fas
+
bottle water
人文 / fas
+
bowl food
人文 / fas
+
bowl rice
人文 / fas
+
boxes packing
人文 / fas
+
bridge
人文 / fas
+
bridge circle check
人文 / fas
+
bridge circle exclamation
人文 / fas
+
bridge circle xmark
人文 / fas
+
bridge lock
人文 / fas
+
bridge water
人文 / fas
+
bucket
人文 / fas
+
bugs
人文 / fas
+
building
人文 / far
+
building
人文 / fas
+
building circle arrow right
人文 / fas
+
building circle check
人文 / fas
+
building circle exclamation
人文 / fas
+
building circle xmark
人文 / fas
+
building columns
人文 / fas
+
building flag
人文 / fas
+
building lock
人文 / fas
+
building ngo
人文 / fas
+
building shield
人文 / fas
+
building un
人文 / fas
+
building user
人文 / fas
+
building wheat
人文 / fas
+
burst
人文 / fas
+
bus
人文 / fas
+
car
人文 / fas
+
car on
人文 / fas
+
car tunnel
人文 / fas
+
child combatant
人文 / fas
+
children
人文 / fas
+
church
人文 / fas
+
circle h
人文 / fas
+
circle nodes
人文 / fas
+
clipboard question
人文 / fas
+
clipboard user
人文 / fas
+
cloud bolt
人文 / fas
+
cloud showers heavy
人文 / fas
+
cloud showers water
人文 / fas
+
computer
人文 / fas
+
cow
人文 / fas
+
cubes stacked
人文 / fas
+
display
人文 / fas
+
droplet
人文 / fas
+
envelope
人文 / far
+
envelope
人文 / fas
+
envelope circle check
人文 / fas
+
explosion
人文 / fas
+
faucet drip
人文 / fas
+
fax
人文 / fas
+
ferry
人文 / fas
+
file
人文 / far
+
file
人文 / fas
+
file circle check
人文 / fas
+
file circle exclamation
人文 / fas
+
file circle minus
人文 / fas
+
file circle plus
人文 / fas
+
file circle question
人文 / fas
+
file circle xmark
人文 / fas
+
file csv
人文 / fas
+
file pdf
人文 / far
+
file pdf
人文 / fas
+
file pen
人文 / fas
+
file shield
人文 / fas
+
fire burner
人文 / fas
+
fire flame simple
人文 / fas
+
fish fins
人文 / fas
+
flag
人文 / far
+
flag
人文 / fas
+
flask vial
人文 / fas
+
gas pump
人文 / fas
+
glass water
人文 / fas
+
glass water droplet
人文 / fas
+
gopuram
人文 / fas
+
group arrows rotate
人文 / fas
+
hammer
人文 / fas
+
hand holding hand
人文 / fas
+
handcuffs
人文 / fas
+
hands bound
人文 / fas
+
hands bubbles
人文 / fas
+
hands holding child
人文 / fas
+
hands holding circle
人文 / fas
+
handshake simple
人文 / fas
+
headset
人文 / fas
+
heart circle bolt
人文 / fas
+
heart circle check
人文 / fas
+
heart circle exclamation
人文 / fas
+
heart circle minus
人文 / fas
+
heart circle plus
人文 / fas
+
heart circle xmark
人文 / fas
+
helicopter
人文 / fas
+
helicopter symbol
人文 / fas
+
helmet un
人文 / fas
+
hill avalanche
人文 / fas
+
hill rockslide
人文 / fas
+
hospital
人文 / far
+
hospital
人文 / fas
+
hotel
人文 / fas
+
house chimney
人文 / fas
+
house chimney crack
人文 / fas
+
house circle check
人文 / fas
+
house circle exclamation
人文 / fas
+
house circle xmark
人文 / fas
+
house fire
人文 / fas
+
house flag
人文 / fas
+
house flood water
人文 / fas
+
house flood water circle arrow right
人文 / fas
+
house lock
人文 / fas
+
house medical
人文 / fas
+
house medical circle check
人文 / fas
+
house medical circle exclamation
人文 / fas
+
house medical circle xmark
人文 / fas
+
house medical flag
人文 / fas
+
house signal
人文 / fas
+
house tsunami
人文 / fas
+
hurricane
人文 / fas
+
id card
人文 / far
+
id card
人文 / fas
+
jar
人文 / fas
+
jar wheat
人文 / fas
+
jet fighter up
人文 / fas
+
jug detergent
人文 / fas
+
kitchen set
人文 / fas
+
land mine on
人文 / fas
+
landmark
人文 / fas
+
landmark dome
人文 / fas
+
landmark flag
人文 / fas
+
laptop
人文 / fas
+
laptop file
人文 / fas
+
life ring
人文 / far
+
life ring
人文 / fas
+
lines leaning
人文 / fas
+
location pin lock
人文 / fas
+
locust
人文 / fas
+
lungs
人文 / fas
+
magnifying glass arrow right
人文 / fas
+
magnifying glass chart
人文 / fas
+
mars and venus
人文 / fas
+
mars and venus burst
人文 / fas
+
mask face
人文 / fas
+
mask ventilator
人文 / fas
+
mattress pillow
人文 / fas
+
microscope
人文 / fas
+
mobile retro
人文 / fas
+
mobile screen
人文 / fas
+
money bill transfer
人文 / fas
+
money bill trend up
人文 / fas
+
money bill wheat
人文 / fas
+
money bills
人文 / fas
+
mosque
人文 / fas
+
mosquito
人文 / fas
+
mosquito net
人文 / fas
+
mound
人文 / fas
+
mountain city
人文 / fas
+
mountain sun
人文 / fas
+
oil well
人文 / fas
+
parachute box
人文 / fas
+
people arrows
人文 / fas
+
people group
人文 / fas
+
people line
人文 / fas
+
people pulling
人文 / fas
+
people robbery
人文 / fas
+
people roof
人文 / fas
+
person
人文 / fas
+
person arrow down to line
人文 / fas
+
person arrow up from line
人文 / fas
+
person breastfeeding
人文 / fas
+
person burst
人文 / fas
+
person cane
人文 / fas
+
person chalkboard
人文 / fas
+
person circle check
人文 / fas
+
person circle exclamation
人文 / fas
+
person circle minus
人文 / fas
+
person circle plus
人文 / fas
+
person circle question
人文 / fas
+
person circle xmark
人文 / fas
+
person digging
人文 / fas
+
person dress
人文 / fas
+
person dress burst
人文 / fas
+
person drowning
人文 / fas
+
person falling
人文 / fas
+
person falling burst
人文 / fas
+
person half dress
人文 / fas
+
person harassing
人文 / fas
+
person military pointing
人文 / fas
+
person military rifle
人文 / fas
+
person military to person
人文 / fas
+
person pregnant
人文 / fas
+
person rays
人文 / fas
+
person rifle
人文 / fas
+
person shelter
人文 / fas
+
person through window
人文 / fas
+
person walking
人文 / fas
+
person walking arrow loop left
人文 / fas
+
person walking arrow right
人文 / fas
+
person walking dashed line arrow right
人文 / fas
+
person walking luggage
人文 / fas
+
pills
人文 / fas
+
plane circle check
人文 / fas
+
plane circle exclamation
人文 / fas
+
plane circle xmark
人文 / fas
+
plane lock
人文 / fas
+
plane up
人文 / fas
+
plant wilt
人文 / fas
+
plate wheat
人文 / fas
+
plug
人文 / fas
+
plug circle bolt
人文 / fas
+
plug circle check
人文 / fas
+
plug circle exclamation
人文 / fas
+
plug circle minus
人文 / fas
+
plug circle plus
人文 / fas
+
plug circle xmark
人文 / fas
+
pump soap
人文 / fas
+
radiation
人文 / fas
+
radio
人文 / fas
+
ranking star
人文 / fas
+
road
人文 / fas
+
road barrier
人文 / fas
+
road bridge
人文 / fas
+
road circle check
人文 / fas
+
road circle exclamation
人文 / fas
+
road circle xmark
人文 / fas
+
road lock
人文 / fas
+
road spikes
人文 / fas
+
rug
人文 / fas
+
sack dollar
人文 / fas
+
sack xmark
人文 / fas
+
sailboat
人文 / fas
+
satellite dish
人文 / fas
+
scale balanced
人文 / fas
+
school
人文 / fas
+
school circle check
人文 / fas
+
school circle exclamation
人文 / fas
+
school circle xmark
人文 / fas
+
school flag
人文 / fas
+
school lock
人文 / fas
+
seedling
人文 / fas
+
sheet plastic
人文 / fas
+
shield cat
人文 / fas
+
shield dog
人文 / fas
+
shield heart
人文 / fas
+
ship
人文 / fas
+
shirt
人文 / fas
+
shop
人文 / fas
+
shop lock
人文 / fas
+
shower
人文 / fas
+
skull crossbones
人文 / fas
+
snowflake
人文 / far
+
snowflake
人文 / fas
+
soap
人文 / fas
+
square nfi
人文 / fas
+
square person confined
人文 / fas
+
square virus
人文 / fas
+
staff snake
人文 / fas
+
stethoscope
人文 / fas
+
suitcase medical
人文 / fas
+
sun plant wilt
人文 / fas
+
syringe
人文 / fas
+
tarp
人文 / fas
+
tarp droplet
人文 / fas
+
temperature arrow down
人文 / fas
+
temperature arrow up
人文 / fas
+
tent
人文 / fas
+
tent arrow down to line
人文 / fas
+
tent arrow left right
人文 / fas
+
tent arrow turn left
人文 / fas
+
tent arrows down
人文 / fas
+
tents
人文 / fas
+
toilet
人文 / fas
+
toilet portable
人文 / fas
+
toilets portable
人文 / fas
+
tornado
人文 / fas
+
tower broadcast
人文 / fas
+
tower cell
人文 / fas
+
tower observation
人文 / fas
+
train subway
人文 / fas
+
trash can
人文 / far
+
trash can
人文 / fas
+
tree city
人文 / fas
+
trowel
人文 / fas
+
trowel bricks
人文 / fas
+
truck
人文 / fas
+
truck arrow right
人文 / fas
+
truck droplet
人文 / fas
+
truck field
人文 / fas
+
truck field un
人文 / fas
+
truck front
人文 / fas
+
truck medical
人文 / fas
+
truck plane
人文 / fas
+
user doctor
人文 / fas
+
user injured
人文 / fas
+
users between lines
人文 / fas
+
users line
人文 / fas
+
users rays
人文 / fas
+
users rectangle
人文 / fas
+
users viewfinder
人文 / fas
+
vial circle check
人文 / fas
+
vial virus
人文 / fas
+
vihara
人文 / fas
+
virus
人文 / fas
+
virus covid
人文 / fas
+
volcano
人文 / fas
+
walkie talkie
人文 / fas
+
wheat awn
人文 / fas
+
wheat awn circle exclamation
人文 / fas
+
wheelchair move
人文 / fas
+
wifi
人文 / fas
+
wind
人文 / fas
+
worm
人文 / fas
+
xmarks lines
人文 / fas
+
address book
商务 / far
+
address book
商务 / fas
+
address card
商务 / far
+
address card
商务 / fas
+
arrows spin
商务 / fas
+
arrows to dot
商务 / fas
+
arrows to eye
商务 / fas
+
bars progress
商务 / fas
+
bars staggered
商务 / fas
+
book
商务 / fas
+
box archive
商务 / fas
+
boxes packing
商务 / fas
+
briefcase
商务 / fas
+
building
商务 / far
+
building
商务 / fas
+
bullhorn
商务 / fas
+
bullseye
商务 / fas
+
business time
商务 / fas
+
cake candles
商务 / fas
+
calculator
商务 / fas
+
calendar
商务 / far
+
calendar
商务 / fas
+
calendar days
商务 / far
+
calendar days
商务 / fas
+
certificate
商务 / fas
+
chart line
商务 / fas
+
chart pie
商务 / fas
+
chart simple
商务 / fas
+
city
商务 / fas
+
clipboard
商务 / far
+
clipboard
商务 / fas
+
clipboard question
商务 / fas
+
compass
商务 / far
+
compass
商务 / fas
+
copy
商务 / far
+
copy
商务 / fas
+
copyright
商务 / far
+
copyright
商务 / fas
+
envelope
商务 / far
+
envelope
商务 / fas
+
envelope circle check
商务 / fas
+
envelope open
商务 / far
+
envelope open
商务 / fas
+
eraser
商务 / fas
+
fax
商务 / fas
+
file
商务 / far
+
file
商务 / fas
+
file circle plus
商务 / fas
+
file lines
商务 / far
+
file lines
商务 / fas
+
floppy disk
商务 / far
+
floppy disk
商务 / fas
+
folder
商务 / far
+
folder
商务 / fas
+
folder minus
商务 / fas
+
folder open
商务 / far
+
folder open
商务 / fas
+
folder plus
商务 / fas
+
folder tree
商务 / fas
+
glasses
商务 / fas
+
globe
商务 / fas
+
highlighter
商务 / fas
+
house laptop
商务 / fas
+
industry
商务 / fas
+
landmark
商务 / fas
+
laptop file
商务 / fas
+
list check
商务 / fas
+
magnifying glass arrow right
商务 / fas
+
magnifying glass chart
商务 / fas
+
marker
商务 / fas
+
mug saucer
商务 / fas
+
network wired
商务 / fas
+
note sticky
商务 / far
+
note sticky
商务 / fas
+
paperclip
商务 / fas
+
paste
商务 / far
+
paste
商务 / fas
+
pen
商务 / fas
+
pen clip
商务 / fas
+
pen fancy
商务 / fas
+
pen nib
商务 / fas
+
pen to square
商务 / far
+
pen to square
商务 / fas
+
pencil
商务 / fas
+
%
percent
商务 / fas
+
person chalkboard
商务 / fas
+
phone
商务 / fas
+
phone flip
商务 / fas
+
phone slash
商务 / fas
+
phone volume
商务 / fas
+
print
商务 / fas
+
registered
商务 / far
+
registered
商务 / fas
+
scale balanced
商务 / fas
+
scale unbalanced
商务 / fas
+
scale unbalanced flip
商务 / fas
+
scissors
商务 / fas
+
signature
商务 / fas
+
sitemap
商务 / fas
+
socks
商务 / fas
+
square envelope
商务 / fas
+
square pen
商务 / fas
+
square phone
商务 / fas
+
square phone flip
商务 / fas
+
square poll horizontal
商务 / fas
+
square poll vertical
商务 / fas
+
stapler
商务 / fas
+
table
商务 / fas
+
table columns
商务 / fas
+
tag
商务 / fas
+
tags
商务 / fas
+
thumbtack
商务 / fas
+
timeline
商务 / fas
+
trademark
商务 / fas
+
vault
商务 / fas
+
wallet
商务 / fas
+
blender phone
设备和硬件 / fas
+
camera
设备和硬件 / fas
+
camera retro
设备和硬件 / fas
+
car battery
设备和硬件 / fas
+
compact disc
设备和硬件 / fas
+
computer
设备和硬件 / fas
+
computer mouse
设备和硬件 / fas
+
database
设备和硬件 / fas
+
desktop
设备和硬件 / fas
+
display
设备和硬件 / fas
+
download
设备和硬件 / fas
+
ethernet
设备和硬件 / fas
+
fax
设备和硬件 / fas
+
floppy disk
设备和硬件 / far
+
floppy disk
设备和硬件 / fas
+
gamepad
设备和硬件 / fas
+
hard drive
设备和硬件 / far
+
hard drive
设备和硬件 / fas
+
headphones
设备和硬件 / fas
+
house laptop
设备和硬件 / fas
+
keyboard
设备和硬件 / far
+
keyboard
设备和硬件 / fas
+
laptop
设备和硬件 / fas
+
laptop file
设备和硬件 / fas
+
memory
设备和硬件 / fas
+
microchip
设备和硬件 / fas
+
mobile
设备和硬件 / fas
+
mobile button
设备和硬件 / fas
+
mobile retro
设备和硬件 / fas
+
mobile screen
设备和硬件 / fas
+
mobile screen button
设备和硬件 / fas
+
plug
设备和硬件 / fas
+
power off
设备和硬件 / fas
+
print
设备和硬件 / fas
+
satellite
设备和硬件 / fas
+
satellite dish
设备和硬件 / fas
+
sd card
设备和硬件 / fas
+
server
设备和硬件 / fas
+
sim card
设备和硬件 / fas
+
tablet
设备和硬件 / fas
+
tablet button
设备和硬件 / fas
+
tablet screen button
设备和硬件 / fas
+
tachograph digital
设备和硬件 / fas
+
tv
设备和硬件 / fas
+
upload
设备和硬件 / fas
+
walkie talkie
设备和硬件 / fas
+
bezier curve
设计 / fas
+
brush
设计 / fas
+
circle half stroke
设计 / fas
+
circle nodes
设计 / fas
+
clone
设计 / far
+
clone
设计 / fas
+
compass drafting
设计 / fas
+
copy
设计 / far
+
copy
设计 / fas
+
crop
设计 / fas
+
crop simple
设计 / fas
+
crosshairs
设计 / fas
+
cube
设计 / fas
+
cubes
设计 / fas
+
draw polygon
设计 / fas
+
droplet
设计 / fas
+
droplet slash
设计 / fas
+
eraser
设计 / fas
+
eye
设计 / far
+
eye
设计 / fas
+
eye dropper
设计 / fas
+
eye slash
设计 / far
+
eye slash
设计 / fas
+
fill
设计 / fas
+
fill drip
设计 / fas
+
floppy disk
设计 / far
+
floppy disk
设计 / fas
+
font awesome
设计 / fab
+
font awesome
设计 / far
+
font awesome
设计 / fas
+
highlighter
设计 / fas
+
icons
设计 / fas
+
layer group
设计 / fas
+
lines leaning
设计 / fas
+
marker
设计 / fas
+
object group
设计 / far
+
object group
设计 / fas
+
object ungroup
设计 / far
+
object ungroup
设计 / fas
+
paint roller
设计 / fas
+
paintbrush
设计 / fas
+
palette
设计 / fas
+
paste
设计 / far
+
paste
设计 / fas
+
pen
设计 / fas
+
pen clip
设计 / fas
+
pen fancy
设计 / fas
+
pen nib
设计 / fas
+
pen ruler
设计 / fas
+
pen to square
设计 / far
+
pen to square
设计 / fas
+
pencil
设计 / fas
+
ruler combined
设计 / fas
+
ruler horizontal
设计 / fas
+
ruler vertical
设计 / fas
+
scissors
设计 / fas
+
splotch
设计 / fas
+
spray can
设计 / fas
+
stamp
设计 / fas
+
stapler
设计 / fas
+
swatchbook
设计 / fas
+
vector square
设计 / fas
+
wand magic
设计 / fas
+
wand magic sparkles
设计 / fas
+
bell
社交 / far
+
bell
社交 / fas
+
cake candles
社交 / fas
+
camera
社交 / fas
+
circle user
社交 / far
+
circle user
社交 / fas
+
comment
社交 / far
+
comment
社交 / fas
+
envelope
社交 / far
+
envelope
社交 / fas
+
#
hashtag
社交 / fas
+
heart
社交 / far
+
heart
社交 / fas
+
icons
社交 / fas
+
image
社交 / far
+
image
社交 / fas
+
images
社交 / far
+
images
社交 / fas
+
location dot
社交 / fas
+
location pin
社交 / fas
+
message
社交 / far
+
message
社交 / fas
+
photo film
社交 / fas
+
retweet
社交 / fas
+
share
社交 / fas
+
share from square
社交 / far
+
share from square
社交 / fas
+
share nodes
社交 / fas
+
square poll horizontal
社交 / fas
+
square poll vertical
社交 / fas
+
square share nodes
社交 / fas
+
star
社交 / far
+
star
社交 / fas
+
thumbs down
社交 / far
+
thumbs down
社交 / fas
+
thumbs up
社交 / far
+
thumbs up
社交 / fas
+
thumbtack
社交 / fas
+
user
社交 / far
+
user
社交 / fas
+
user group
社交 / fas
+
user plus
社交 / fas
+
users
社交 / fas
+
video
社交 / fas
+
bell
时间 / far
+
bell
时间 / fas
+
bell slash
时间 / far
+
bell slash
时间 / fas
+
calendar
时间 / far
+
calendar
时间 / fas
+
calendar check
时间 / far
+
calendar check
时间 / fas
+
calendar day
时间 / fas
+
calendar days
时间 / far
+
calendar days
时间 / fas
+
calendar minus
时间 / far
+
calendar minus
时间 / fas
+
calendar plus
时间 / far
+
calendar plus
时间 / fas
+
calendar week
时间 / fas
+
calendar xmark
时间 / far
+
calendar xmark
时间 / fas
+
clock
时间 / far
+
clock
时间 / fas
+
hourglass
时间 / far
+
hourglass
时间 / fas
+
hourglass end
时间 / fas
+
hourglass half
时间 / far
+
hourglass half
时间 / fas
+
hourglass start
时间 / fas
+
stopwatch
时间 / fas
+
stopwatch 20
时间 / fas
+
apple whole
食物和饮料 / fas
+
bacon
食物和饮料 / fas
+
beer mug empty
食物和饮料 / fas
+
blender
食物和饮料 / fas
+
bone
食物和饮料 / fas
+
bottle droplet
食物和饮料 / fas
+
bottle water
食物和饮料 / fas
+
bowl food
食物和饮料 / fas
+
bowl rice
食物和饮料 / fas
+
bread slice
食物和饮料 / fas
+
burger
食物和饮料 / fas
+
cake candles
食物和饮料 / fas
+
candy cane
食物和饮料 / fas
+
carrot
食物和饮料 / fas
+
champagne glasses
食物和饮料 / fas
+
cheese
食物和饮料 / fas
+
cloud meatball
食物和饮料 / fas
+
cookie
食物和饮料 / fas
+
cubes stacked
食物和饮料 / fas
+
drumstick bite
食物和饮料 / fas
+
egg
食物和饮料 / fas
+
fish
食物和饮料 / fas
+
fish fins
食物和饮料 / fas
+
flask
食物和饮料 / fas
+
glass water
食物和饮料 / fas
+
glass water droplet
食物和饮料 / fas
+
hotdog
食物和饮料 / fas
+
ice cream
食物和饮料 / fas
+
jar
食物和饮料 / fas
+
jar wheat
食物和饮料 / fas
+
lemon
食物和饮料 / far
+
lemon
食物和饮料 / fas
+
martini glass
食物和饮料 / fas
+
martini glass citrus
食物和饮料 / fas
+
martini glass empty
食物和饮料 / fas
+
mug hot
食物和饮料 / fas
+
mug saucer
食物和饮料 / fas
+
pepper hot
食物和饮料 / fas
+
pizza slice
食物和饮料 / fas
+
plate wheat
食物和饮料 / fas
+
seedling
食物和饮料 / fas
+
shrimp
食物和饮料 / fas
+
stroopwafel
食物和饮料 / fas
+
wheat awn
食物和饮料 / fas
+
wheat awn circle exclamation
食物和饮料 / fas
+
whiskey glass
食物和饮料 / fas
+
wine bottle
食物和饮料 / fas
+
wine glass
食物和饮料 / fas
+
wine glass empty
食物和饮料 / fas
+
arrows spin
市场营销 / fas
+
arrows to dot
市场营销 / fas
+
arrows to eye
市场营销 / fas
+
bullhorn
市场营销 / fas
+
bullseye
市场营销 / fas
+
chart simple
市场营销 / fas
+
comment dollar
市场营销 / fas
+
comments dollar
市场营销 / fas
+
envelope open text
市场营销 / fas
+
envelopes bulk
市场营销 / fas
+
filter circle dollar
市场营销 / fas
+
group arrows rotate
市场营销 / fas
+
lightbulb
市场营销 / far
+
lightbulb
市场营销 / fas
+
magnifying glass arrow right
市场营销 / fas
+
magnifying glass chart
市场营销 / fas
+
magnifying glass dollar
市场营销 / fas
+
magnifying glass location
市场营销 / fas
+
people group
市场营销 / fas
+
person rays
市场营销 / fas
+
ranking star
市场营销 / fas
+
rectangle ad
市场营销 / fas
+
square poll horizontal
市场营销 / fas
+
square poll vertical
市场营销 / fas
+
timeline
市场营销 / fas
+
hand
手 / far
+
hand
手 / fas
+
hand back fist
手 / far
+
hand back fist
手 / fas
+
hand dots
手 / fas
+
hand fist
手 / fas
+
hand holding
手 / fas
+
hand holding dollar
手 / fas
+
hand holding droplet
手 / fas
+
hand holding hand
手 / fas
+
hand holding heart
手 / fas
+
hand holding medical
手 / fas
+
hand lizard
手 / far
+
hand lizard
手 / fas
+
hand middle finger
手 / fas
+
hand peace
手 / far
+
hand peace
手 / fas
+
hand point down
手 / far
+
hand point down
手 / fas
+
hand point left
手 / far
+
hand point left
手 / fas
+
hand point right
手 / far
+
hand point right
手 / fas
+
hand point up
手 / far
+
hand point up
手 / fas
+
hand pointer
手 / far
+
hand pointer
手 / fas
+
hand scissors
手 / far
+
hand scissors
手 / fas
+
hand sparkles
手 / fas
+
hand spock
手 / far
+
hand spock
手 / fas
+
hands bound
手 / fas
+
hands bubbles
手 / fas
+
hands clapping
手 / fas
+
hands holding
手 / fas
+
hands holding child
手 / fas
+
hands holding circle
手 / fas
+
hands praying
手 / fas
+
handshake
手 / far
+
handshake
手 / fas
+
handshake angle
手 / fas
+
handshake simple
手 / fas
+
handshake simple slash
手 / fas
+
handshake slash
手 / fas
+
thumbs down
手 / far
+
thumbs down
手 / fas
+
thumbs up
手 / far
+
thumbs up
手 / fas
+
calculator
数学计算 / fas
+
circle minus
数学计算 / fas
+
circle plus
数学计算 / fas
+
circle xmark
数学计算 / far
+
circle xmark
数学计算 / fas
+
divide
数学计算 / fas
+
=
equals
数学计算 / fas
+
>
greater than
数学计算 / fas
+
greater than equal
数学计算 / fas
+
infinity
数学计算 / fas
+
<
less than
数学计算 / fas
+
less than equal
数学计算 / fas
+
minus
数学计算 / fas
+
not equal
数学计算 / fas
+
%
percent
数学计算 / fas
+
+
plus
数学计算 / fas
+
plus minus
数学计算 / fas
+
square minus
数学计算 / far
+
square minus
数学计算 / fas
+
square root variable
数学计算 / fas
+
square xmark
数学计算 / fas
+
subscript
数学计算 / fas
+
superscript
数学计算 / fas
+
wave square
数学计算 / fas
+
xmark
数学计算 / fas
+
0
0
数字 / fas
+
1
1
数字 / fas
+
2
2
数字 / fas
+
3
3
数字 / fas
+
4
4
数字 / fas
+
5
5
数字 / fas
+
6
6
数字 / fas
+
7
7
数字 / fas
+
8
8
数字 / fas
+
9
9
数字 / fas
+
apple whole
水果和蔬菜 / fas
+
carrot
水果和蔬菜 / fas
+
leaf
水果和蔬菜 / fas
+
lemon
水果和蔬菜 / far
+
lemon
水果和蔬菜 / fas
+
pepper hot
水果和蔬菜 / fas
+
seedling
水果和蔬菜 / fas
+
globe
天文学 / fas
+
meteor
天文学 / fas
+
moon
天文学 / far
+
moon
天文学 / fas
+
satellite
天文学 / fas
+
satellite dish
天文学 / fas
+
shuttle space
天文学 / fas
+
user astronaut
天文学 / fas
+
address book
通讯 / far
+
address book
通讯 / fas
+
address card
通讯 / far
+
address card
通讯 / fas
+
@
at
通讯 / fas
+
blender phone
通讯 / fas
+
bluetooth b
通讯 / fab
+
bullhorn
通讯 / fas
+
comment
通讯 / far
+
comment
通讯 / fas
+
comment dots
通讯 / far
+
comment dots
通讯 / fas
+
comment medical
通讯 / fas
+
comment slash
通讯 / fas
+
comment sms
通讯 / fas
+
comments
通讯 / far
+
comments
通讯 / fas
+
ear listen
通讯 / fas
+
envelope
通讯 / far
+
envelope
通讯 / fas
+
envelope circle check
通讯 / fas
+
envelope open
通讯 / far
+
envelope open
通讯 / fas
+
face frown
通讯 / far
+
face frown
通讯 / fas
+
face meh
通讯 / far
+
face meh
通讯 / fas
+
face smile
通讯 / far
+
face smile
通讯 / fas
+
fax
通讯 / fas
+
hands asl interpreting
通讯 / fas
+
icons
通讯 / fas
+
inbox
通讯 / fas
+
language
通讯 / fas
+
message
通讯 / far
+
message
通讯 / fas
+
microphone
通讯 / fas
+
microphone lines
通讯 / fas
+
microphone lines slash
通讯 / fas
+
microphone slash
通讯 / fas
+
mobile
通讯 / fas
+
mobile button
通讯 / fas
+
mobile retro
通讯 / fas
+
mobile screen
通讯 / fas
+
mobile screen button
通讯 / fas
+
paper plane
通讯 / far
+
paper plane
通讯 / fas
+
phone
通讯 / fas
+
phone flip
通讯 / fas
+
phone slash
通讯 / fas
+
phone volume
通讯 / fas
+
poo
通讯 / fas
+
quote left
通讯 / fas
+
quote right
通讯 / fas
+
square envelope
通讯 / fas
+
square phone
通讯 / fas
+
square phone flip
通讯 / fas
+
square rss
通讯 / fas
+
tower cell
通讯 / fas
+
tty
通讯 / fas
+
video
通讯 / fas
+
video slash
通讯 / fas
+
voicemail
通讯 / fas
+
walkie talkie
通讯 / fas
+
apple whole
童年 / fas
+
baby
童年 / fas
+
baby carriage
童年 / fas
+
baseball bat ball
童年 / fas
+
bath
童年 / fas
+
bucket
童年 / fas
+
cake candles
童年 / fas
+
child
童年 / fas
+
child dress
童年 / fas
+
child reaching
童年 / fas
+
children
童年 / fas
+
cookie
童年 / fas
+
cookie bite
童年 / fas
+
cubes stacked
童年 / fas
+
gamepad
童年 / fas
+
hands holding child
童年 / fas
+
ice cream
童年 / fas
+
mitten
童年 / fas
+
person biking
童年 / fas
+
person breastfeeding
童年 / fas
+
puzzle piece
童年 / fas
+
robot
童年 / fas
+
school
童年 / fas
+
shapes
童年 / fas
+
snowman
童年 / fas
+
bars progress
图表 / fas
+
chart area
图表 / fas
+
chart bar
图表 / far
+
chart bar
图表 / fas
+
chart column
图表 / fas
+
chart gantt
图表 / fas
+
chart line
图表 / fas
+
chart pie
图表 / fas
+
chart simple
图表 / fas
+
circle half stroke
图表 / fas
+
diagram next
图表 / fas
+
diagram predecessor
图表 / fas
+
diagram project
图表 / fas
+
diagram successor
图表 / fas
+
square poll horizontal
图表 / fas
+
square poll vertical
图表 / fas
+
book skull
万圣节 / fas
+
broom
万圣节 / fas
+
cat
万圣节 / fas
+
cloud moon
万圣节 / fas
+
crow
万圣节 / fas
+
ghost
万圣节 / fas
+
hat wizard
万圣节 / fas
+
mask
万圣节 / fas
+
skull
万圣节 / fas
+
skull crossbones
万圣节 / fas
+
spider
万圣节 / fas
+
toilet paper
万圣节 / fas
+
wand sparkles
万圣节 / fas
+
align center
文本格式 / fas
+
align justify
文本格式 / fas
+
align left
文本格式 / fas
+
align right
文本格式 / fas
+
bold
文本格式 / fas
+
border all
文本格式 / fas
+
border none
文本格式 / fas
+
border top left
文本格式 / fas
+
check
文本格式 / fas
+
check double
文本格式 / fas
+
circle check
文本格式 / far
+
circle check
文本格式 / fas
+
filter circle xmark
文本格式 / fas
+
font
文本格式 / fas
+
heading
文本格式 / fas
+
highlighter
文本格式 / fas
+
i cursor
文本格式 / fas
+
icons
文本格式 / fas
+
indent
文本格式 / fas
+
italic
文本格式 / fas
+
list
文本格式 / fas
+
list check
文本格式 / fas
+
list ol
文本格式 / fas
+
list ul
文本格式 / fas
+
outdent
文本格式 / fas
+
paragraph
文本格式 / fas
+
rectangle list
文本格式 / far
+
rectangle list
文本格式 / fas
+
spell check
文本格式 / fas
+
square check
文本格式 / far
+
square check
文本格式 / fas
+
strikethrough
文本格式 / fas
+
subscript
文本格式 / fas
+
superscript
文本格式 / fas
+
table
文本格式 / fas
+
table cells
文本格式 / fas
+
table cells large
文本格式 / fas
+
table columns
文本格式 / fas
+
table list
文本格式 / fas
+
text height
文本格式 / fas
+
text slash
文本格式 / fas
+
text width
文本格式 / fas
+
underline
文本格式 / fas
+
box archive
文件 / fas
+
clone
文件 / far
+
clone
文件 / fas
+
copy
文件 / far
+
copy
文件 / fas
+
file
文件 / far
+
file
文件 / fas
+
file arrow down
文件 / fas
+
file arrow up
文件 / fas
+
file audio
文件 / far
+
file audio
文件 / fas
+
file circle check
文件 / fas
+
file circle exclamation
文件 / fas
+
file circle minus
文件 / fas
+
file circle plus
文件 / fas
+
file circle question
文件 / fas
+
file circle xmark
文件 / fas
+
file code
文件 / far
+
file code
文件 / fas
+
file csv
文件 / fas
+
file excel
文件 / far
+
file excel
文件 / fas
+
file export
文件 / fas
+
file image
文件 / far
+
file image
文件 / fas
+
file import
文件 / fas
+
file lines
文件 / far
+
file lines
文件 / fas
+
file pdf
文件 / far
+
file pdf
文件 / fas
+
file pen
文件 / fas
+
file powerpoint
文件 / far
+
file powerpoint
文件 / fas
+
file shield
文件 / fas
+
file video
文件 / far
+
file video
文件 / fas
+
file word
文件 / far
+
file word
文件 / fas
+
file zipper
文件 / far
+
file zipper
文件 / fas
+
floppy disk
文件 / far
+
floppy disk
文件 / fas
+
folder
文件 / far
+
folder
文件 / fas
+
folder closed
文件 / far
+
folder closed
文件 / fas
+
folder open
文件 / far
+
folder open
文件 / fas
+
note sticky
文件 / far
+
note sticky
文件 / fas
+
paste
文件 / far
+
paste
文件 / fas
+
photo film
文件 / fas
+
scissors
文件 / fas
+
accessible icon
无障碍 / fab
+
audio description
无障碍 / fas
+
braille
无障碍 / fas
+
circle info
无障碍 / fas
+
circle question
无障碍 / far
+
circle question
无障碍 / fas
+
closed captioning
无障碍 / far
+
closed captioning
无障碍 / fas
+
ear deaf
无障碍 / fas
+
ear listen
无障碍 / fas
+
eye
无障碍 / far
+
eye
无障碍 / fas
+
eye low vision
无障碍 / fas
+
fingerprint
无障碍 / fas
+
hands
无障碍 / fas
+
hands asl interpreting
无障碍 / fas
+
handshake angle
无障碍 / fas
+
person cane
无障碍 / fas
+
person walking with cane
无障碍 / fas
+
phone volume
无障碍 / fas
+
?
question
无障碍 / fas
+
tty
无障碍 / fas
+
universal access
无障碍 / fas
+
wheelchair
无障碍 / fas
+
wheelchair move
无障碍 / fas
+
bookmark
形状 / far
+
bookmark
形状 / fas
+
burst
形状 / fas
+
calendar
形状 / far
+
calendar
形状 / fas
+
certificate
形状 / fas
+
circle
形状 / far
+
circle
形状 / fas
+
circle half stroke
形状 / fas
+
cloud
形状 / fas
+
clover
形状 / fas
+
comment
形状 / far
+
comment
形状 / fas
+
crown
形状 / fas
+
cubes stacked
形状 / fas
+
diamond
形状 / fas
+
file
形状 / far
+
file
形状 / fas
+
folder
形状 / far
+
folder
形状 / fas
+
heart
形状 / far
+
heart
形状 / fas
+
heart crack
形状 / fas
+
lines leaning
形状 / fas
+
location pin
形状 / fas
+
play
形状 / fas
+
shapes
形状 / fas
+
shield
形状 / fas
+
square
形状 / far
+
square
形状 / fas
+
star
形状 / far
+
star
形状 / fas
+
ticket simple
形状 / fas
+
genderless
性别 / fas
+
mars
性别 / fas
+
mars and venus
性别 / fas
+
mars double
性别 / fas
+
mars stroke
性别 / fas
+
mars stroke right
性别 / fas
+
mars stroke up
性别 / fas
+
mercury
性别 / fas
+
neuter
性别 / fas
+
person half dress
性别 / fas
+
transgender
性别 / fas
+
venus
性别 / fas
+
venus double
性别 / fas
+
venus mars
性别 / fas
+
arrows spin
旋转图标 / fas
+
*
asterisk
旋转图标 / fas
+
atom
旋转图标 / fas
+
bahai
旋转图标 / fas
+
certificate
旋转图标 / fas
+
circle notch
旋转图标 / fas
+
compact disc
旋转图标 / fas
+
compass
旋转图标 / far
+
compass
旋转图标 / fas
+
crosshairs
旋转图标 / fas
+
dharmachakra
旋转图标 / fas
+
fan
旋转图标 / fas
+
gear
旋转图标 / fas
+
hurricane
旋转图标 / fas
+
life ring
旋转图标 / far
+
life ring
旋转图标 / fas
+
palette
旋转图标 / fas
+
ring
旋转图标 / fas
+
rotate
旋转图标 / fas
+
slash
旋转图标 / fas
+
snowflake
旋转图标 / far
+
snowflake
旋转图标 / fas
+
spinner
旋转图标 / fas
+
stroopwafel
旋转图标 / fas
+
sun
旋转图标 / far
+
sun
旋转图标 / fas
+
yin yang
旋转图标 / fas
+
accessible icon
医疗和健康 / fab
+
bacteria
医疗和健康 / fas
+
bacterium
医疗和健康 / fas
+
ban smoking
医疗和健康 / fas
+
bandage
医疗和健康 / fas
+
bed pulse
医疗和健康 / fas
+
biohazard
医疗和健康 / fas
+
bone
医疗和健康 / fas
+
bong
医疗和健康 / fas
+
book medical
医疗和健康 / fas
+
brain
医疗和健康 / fas
+
briefcase medical
医疗和健康 / fas
+
cannabis
医疗和健康 / fas
+
capsules
医疗和健康 / fas
+
circle h
医疗和健康 / fas
+
circle radiation
医疗和健康 / fas
+
clipboard user
医疗和健康 / fas
+
clock rotate left
医疗和健康 / fas
+
comment medical
医疗和健康 / fas
+
crutch
医疗和健康 / fas
+
disease
医疗和健康 / fas
+
dna
医疗和健康 / fas
+
eye
医疗和健康 / far
+
eye
医疗和健康 / fas
+
eye dropper
医疗和健康 / fas
+
file medical
医疗和健康 / fas
+
file prescription
医疗和健康 / fas
+
file waveform
医疗和健康 / fas
+
fire flame simple
医疗和健康 / fas
+
flask
医疗和健康 / fas
+
flask vial
医疗和健康 / fas
+
hand dots
医疗和健康 / fas
+
hand holding medical
医疗和健康 / fas
+
head side cough
医疗和健康 / fas
+
head side cough slash
医疗和健康 / fas
+
head side mask
医疗和健康 / fas
+
head side virus
医疗和健康 / fas
+
heart
医疗和健康 / far
+
heart
医疗和健康 / fas
+
heart circle bolt
医疗和健康 / fas
+
heart circle check
医疗和健康 / fas
+
heart circle exclamation
医疗和健康 / fas
+
heart circle minus
医疗和健康 / fas
+
heart circle plus
医疗和健康 / fas
+
heart circle xmark
医疗和健康 / fas
+
heart pulse
医疗和健康 / fas
+
hospital
医疗和健康 / far
+
hospital
医疗和健康 / fas
+
hospital user
医疗和健康 / fas
+
house chimney medical
医疗和健康 / fas
+
house medical
医疗和健康 / fas
+
house medical circle check
医疗和健康 / fas
+
house medical circle exclamation
医疗和健康 / fas
+
house medical circle xmark
医疗和健康 / fas
+
house medical flag
医疗和健康 / fas
+
id card clip
医疗和健康 / fas
+
joint
医疗和健康 / fas
+
kit medical
医疗和健康 / fas
+
laptop medical
医疗和健康 / fas
+
lungs
医疗和健康 / fas
+
lungs virus
医疗和健康 / fas
+
mask face
医疗和健康 / fas
+
mask ventilator
医疗和健康 / fas
+
microscope
医疗和健康 / fas
+
mortar pestle
医疗和健康 / fas
+
notes medical
医疗和健康 / fas
+
pager
医疗和健康 / fas
+
person breastfeeding
医疗和健康 / fas
+
person cane
医疗和健康 / fas
+
person dots from line
医疗和健康 / fas
+
person half dress
医疗和健康 / fas
+
pills
医疗和健康 / fas
+
+
plus
医疗和健康 / fas
+
poop
医疗和健康 / fas
+
prescription
医疗和健康 / fas
+
prescription bottle
医疗和健康 / fas
+
prescription bottle medical
医疗和健康 / fas
+
pump medical
医疗和健康 / fas
+
radiation
医疗和健康 / fas
+
receipt
医疗和健康 / fas
+
shield virus
医疗和健康 / fas
+
skull
医疗和健康 / fas
+
skull crossbones
医疗和健康 / fas
+
smoking
医疗和健康 / fas
+
square h
医疗和健康 / fas
+
square plus
医疗和健康 / far
+
square plus
医疗和健康 / fas
+
square virus
医疗和健康 / fas
+
staff snake
医疗和健康 / fas
+
star of life
医疗和健康 / fas
+
stethoscope
医疗和健康 / fas
+
suitcase medical
医疗和健康 / fas
+
syringe
医疗和健康 / fas
+
tablets
医疗和健康 / fas
+
teeth
医疗和健康 / fas
+
teeth open
医疗和健康 / fas
+
thermometer
医疗和健康 / fas
+
tooth
医疗和健康 / fas
+
truck medical
医疗和健康 / fas
+
user doctor
医疗和健康 / fas
+
user nurse
医疗和健康 / fas
+
vial
医疗和健康 / fas
+
vial circle check
医疗和健康 / fas
+
vial virus
医疗和健康 / fas
+
vials
医疗和健康 / fas
+
virus
医疗和健康 / fas
+
virus covid
医疗和健康 / fas
+
virus covid slash
医疗和健康 / fas
+
virus slash
医疗和健康 / fas
+
viruses
医疗和健康 / fas
+
weight scale
医疗和健康 / fas
+
wheelchair
医疗和健康 / fas
+
wheelchair move
医疗和健康 / fas
+
x ray
医疗和健康 / fas
+
box archive
移动 / fas
+
box open
移动 / fas
+
boxes packing
移动 / fas
+
caravan
移动 / fas
+
couch
移动 / fas
+
dolly
移动 / fas
+
house chimney
移动 / fas
+
people carry box
移动 / fas
+
route
移动 / fas
+
sign hanging
移动 / fas
+
suitcase
移动 / fas
+
tape
移动 / fas
+
trailer
移动 / fas
+
truck moving
移动 / fas
+
truck ramp box
移动 / fas
+
wine glass
移动 / fas
+
compact disc
音乐和音频 / fas
+
drum
音乐和音频 / fas
+
drum steelpan
音乐和音频 / fas
+
file audio
音乐和音频 / far
+
file audio
音乐和音频 / fas
+
guitar
音乐和音频 / fas
+
headphones
音乐和音频 / fas
+
headphones simple
音乐和音频 / fas
+
microphone
音乐和音频 / fas
+
microphone lines
音乐和音频 / fas
+
microphone lines slash
音乐和音频 / fas
+
microphone slash
音乐和音频 / fas
+
music
音乐和音频 / fas
+
napster
音乐和音频 / fab
+
radio
音乐和音频 / fas
+
record vinyl
音乐和音频 / fas
+
sliders
音乐和音频 / fas
+
soundcloud
音乐和音频 / fab
+
spotify
音乐和音频 / fab
+
volume high
音乐和音频 / fas
+
volume low
音乐和音频 / fas
+
volume off
音乐和音频 / fas
+
volume xmark
音乐和音频 / fas
+
accessible icon
用户和人群 / fab
+
address book
用户和人群 / far
+
address book
用户和人群 / fas
+
address card
用户和人群 / far
+
address card
用户和人群 / fas
+
arrows down to people
用户和人群 / fas
+
baby
用户和人群 / fas
+
bed
用户和人群 / fas
+
chalkboard user
用户和人群 / fas
+
child
用户和人群 / fas
+
child dress
用户和人群 / fas
+
child reaching
用户和人群 / fas
+
children
用户和人群 / fas
+
circle user
用户和人群 / far
+
circle user
用户和人群 / fas
+
clipboard user
用户和人群 / fas
+
elevator
用户和人群 / fas
+
face frown
用户和人群 / far
+
face frown
用户和人群 / fas
+
face meh
用户和人群 / far
+
face meh
用户和人群 / fas
+
face smile
用户和人群 / far
+
face smile
用户和人群 / fas
+
head side cough
用户和人群 / fas
+
head side cough slash
用户和人群 / fas
+
head side mask
用户和人群 / fas
+
head side virus
用户和人群 / fas
+
hospital user
用户和人群 / fas
+
hot tub person
用户和人群 / fas
+
house chimney user
用户和人群 / fas
+
house user
用户和人群 / fas
+
id badge
用户和人群 / far
+
id badge
用户和人群 / fas
+
id card
用户和人群 / far
+
id card
用户和人群 / fas
+
id card clip
用户和人群 / fas
+
image portrait
用户和人群 / fas
+
mars and venus burst
用户和人群 / fas
+
people arrows
用户和人群 / fas
+
people carry box
用户和人群 / fas
+
people group
用户和人群 / fas
+
people line
用户和人群 / fas
+
people pulling
用户和人群 / fas
+
people robbery
用户和人群 / fas
+
people roof
用户和人群 / fas
+
person
用户和人群 / fas
+
person arrow down to line
用户和人群 / fas
+
person arrow up from line
用户和人群 / fas
+
person biking
用户和人群 / fas
+
person booth
用户和人群 / fas
+
person breastfeeding
用户和人群 / fas
+
person burst
用户和人群 / fas
+
person cane
用户和人群 / fas
+
person chalkboard
用户和人群 / fas
+
person circle check
用户和人群 / fas
+
person circle exclamation
用户和人群 / fas
+
person circle minus
用户和人群 / fas
+
person circle plus
用户和人群 / fas
+
person circle question
用户和人群 / fas
+
person circle xmark
用户和人群 / fas
+
person digging
用户和人群 / fas
+
person dots from line
用户和人群 / fas
+
person dress
用户和人群 / fas
+
person dress burst
用户和人群 / fas
+
person drowning
用户和人群 / fas
+
person falling
用户和人群 / fas
+
person falling burst
用户和人群 / fas
+
person half dress
用户和人群 / fas
+
person harassing
用户和人群 / fas
+
person hiking
用户和人群 / fas
+
person military pointing
用户和人群 / fas
+
person military rifle
用户和人群 / fas
+
person military to person
用户和人群 / fas
+
person praying
用户和人群 / fas
+
person pregnant
用户和人群 / fas
+
person rays
用户和人群 / fas
+
person rifle
用户和人群 / fas
+
person running
用户和人群 / fas
+
person shelter
用户和人群 / fas
+
person skating
用户和人群 / fas
+
person skiing
用户和人群 / fas
+
person skiing nordic
用户和人群 / fas
+
person snowboarding
用户和人群 / fas
+
person swimming
用户和人群 / fas
+
person through window
用户和人群 / fas
+
person walking
用户和人群 / fas
+
person walking arrow loop left
用户和人群 / fas
+
person walking arrow right
用户和人群 / fas
+
person walking dashed line arrow right
用户和人群 / fas
+
person walking luggage
用户和人群 / fas
+
person walking with cane
用户和人群 / fas
+
poo
用户和人群 / fas
+
restroom
用户和人群 / fas
+
skull
用户和人群 / fas
+
square person confined
用户和人群 / fas
+
street view
用户和人群 / fas
+
user
用户和人群 / far
+
user
用户和人群 / fas
+
user astronaut
用户和人群 / fas
+
user check
用户和人群 / fas
+
user clock
用户和人群 / fas
+
user doctor
用户和人群 / fas
+
user gear
用户和人群 / fas
+
user graduate
用户和人群 / fas
+
user group
用户和人群 / fas
+
user injured
用户和人群 / fas
+
user large
用户和人群 / fas
+
user large slash
用户和人群 / fas
+
user lock
用户和人群 / fas
+
user minus
用户和人群 / fas
+
user ninja
用户和人群 / fas
+
user nurse
用户和人群 / fas
+
user pen
用户和人群 / fas
+
user plus
用户和人群 / fas
+
user secret
用户和人群 / fas
+
user shield
用户和人群 / fas
+
user slash
用户和人群 / fas
+
user tag
用户和人群 / fas
+
user tie
用户和人群 / fas
+
user xmark
用户和人群 / fas
+
users
用户和人群 / fas
+
users between lines
用户和人群 / fas
+
users gear
用户和人群 / fas
+
users line
用户和人群 / fas
+
users rays
用户和人群 / fas
+
users rectangle
用户和人群 / fas
+
users slash
用户和人群 / fas
+
users viewfinder
用户和人群 / fas
+
wheelchair
用户和人群 / fas
+
wheelchair move
用户和人群 / fas
+
book skull
游戏 / fas
+
chess
游戏 / fas
+
chess bishop
游戏 / far
+
chess bishop
游戏 / fas
+
chess board
游戏 / fas
+
chess king
游戏 / far
+
chess king
游戏 / fas
+
chess knight
游戏 / far
+
chess knight
游戏 / fas
+
chess pawn
游戏 / far
+
chess pawn
游戏 / fas
+
chess queen
游戏 / far
+
chess queen
游戏 / fas
+
chess rook
游戏 / far
+
chess rook
游戏 / fas
+
critical role
游戏 / fab
+
d and d
游戏 / fab
+
d and d beyond
游戏 / fab
+
diamond
游戏 / fas
+
dice
游戏 / fas
+
dice d20
游戏 / fas
+
dice d6
游戏 / fas
+
dice five
游戏 / fas
+
dice four
游戏 / fas
+
dice one
游戏 / fas
+
dice six
游戏 / fas
+
dice three
游戏 / fas
+
dice two
游戏 / fas
+
dragon
游戏 / fas
+
dungeon
游戏 / fas
+
fantasy flight games
游戏 / fab
+
gamepad
游戏 / fas
+
ghost
游戏 / fas
+
hand fist
游戏 / fas
+
hat wizard
游戏 / fas
+
headset
游戏 / fas
+
heart
游戏 / far
+
heart
游戏 / fas
+
playstation
游戏 / fab
+
puzzle piece
游戏 / fas
+
ring
游戏 / fas
+
scroll
游戏 / fas
+
shield halved
游戏 / fas
+
skull crossbones
游戏 / fas
+
square full
游戏 / far
+
square full
游戏 / fas
+
square steam
游戏 / fab
+
steam
游戏 / fab
+
steam symbol
游戏 / fab
+
twitch
游戏 / fab
+
vr cardboard
游戏 / fas
+
wand sparkles
游戏 / fas
+
wizards of the coast
游戏 / fab
+
xbox
游戏 / fab
+
baseball
运动和健身 / fas
+
baseball bat ball
运动和健身 / fas
+
basketball
运动和健身 / fas
+
bicycle
运动和健身 / fas
+
bowling ball
运动和健身 / fas
+
broom ball
运动和健身 / fas
+
dumbbell
运动和健身 / fas
+
fire flame curved
运动和健身 / fas
+
fire flame simple
运动和健身 / fas
+
football
运动和健身 / fas
+
futbol
运动和健身 / far
+
futbol
运动和健身 / fas
+
golf ball tee
运动和健身 / fas
+
heart
运动和健身 / far
+
heart
运动和健身 / fas
+
heart pulse
运动和健身 / fas
+
hockey puck
运动和健身 / fas
+
medal
运动和健身 / fas
+
mound
运动和健身 / fas
+
person biking
运动和健身 / fas
+
person hiking
运动和健身 / fas
+
person running
运动和健身 / fas
+
person skating
运动和健身 / fas
+
person skiing
运动和健身 / fas
+
person skiing nordic
运动和健身 / fas
+
person snowboarding
运动和健身 / fas
+
person swimming
运动和健身 / fas
+
person walking
运动和健身 / fas
+
ranking star
运动和健身 / fas
+
shoe prints
运动和健身 / fas
+
spa
运动和健身 / fas
+
stopwatch 20
运动和健身 / fas
+
table tennis paddle ball
运动和健身 / fas
+
volleyball
运动和健身 / fas
+
weight hanging
运动和健身 / fas
+
biohazard
灾难和危机 / fas
+
bugs
灾难和危机 / fas
+
burst
灾难和危机 / fas
+
child combatant
灾难和危机 / fas
+
circle radiation
灾难和危机 / fas
+
cloud bolt
灾难和危机 / fas
+
cloud showers heavy
灾难和危机 / fas
+
cloud showers water
灾难和危机 / fas
+
helmet un
灾难和危机 / fas
+
hill avalanche
灾难和危机 / fas
+
hill rockslide
灾难和危机 / fas
+
house chimney crack
灾难和危机 / fas
+
house crack
灾难和危机 / fas
+
house fire
灾难和危机 / fas
+
house flood water
灾难和危机 / fas
+
house flood water circle arrow right
灾难和危机 / fas
+
house tsunami
灾难和危机 / fas
+
hurricane
灾难和危机 / fas
+
locust
灾难和危机 / fas
+
mosquito
灾难和危机 / fas
+
person drowning
灾难和危机 / fas
+
person rifle
灾难和危机 / fas
+
person walking arrow loop left
灾难和危机 / fas
+
person walking arrow right
灾难和危机 / fas
+
person walking dashed line arrow right
灾难和危机 / fas
+
plant wilt
灾难和危机 / fas
+
radiation
灾难和危机 / fas
+
snowflake
灾难和危机 / far
+
snowflake
灾难和危机 / fas
+
sun plant wilt
灾难和危机 / fas
+
temperature arrow down
灾难和危机 / fas
+
temperature arrow up
灾难和危机 / fas
+
tornado
灾难和危机 / fas
+
volcano
灾难和危机 / fas
+
wheat awn circle exclamation
灾难和危机 / fas
+
wind
灾难和危机 / fas
+
worm
灾难和危机 / fas
+
xmarks lines
灾难和危机 / fas
+
bolt
照片和图片 / fas
+
bolt lightning
照片和图片 / fas
+
camera
照片和图片 / fas
+
camera retro
照片和图片 / fas
+
camera rotate
照片和图片 / fas
+
chalkboard
照片和图片 / fas
+
circle half stroke
照片和图片 / fas
+
clone
照片和图片 / far
+
clone
照片和图片 / fas
+
droplet
照片和图片 / fas
+
eye
照片和图片 / far
+
eye
照片和图片 / fas
+
eye dropper
照片和图片 / fas
+
eye slash
照片和图片 / far
+
eye slash
照片和图片 / fas
+
file image
照片和图片 / far
+
file image
照片和图片 / fas
+
film
照片和图片 / fas
+
id badge
照片和图片 / far
+
id badge
照片和图片 / fas
+
id card
照片和图片 / far
+
id card
照片和图片 / fas
+
image
照片和图片 / far
+
image
照片和图片 / fas
+
image portrait
照片和图片 / fas
+
images
照片和图片 / far
+
images
照片和图片 / fas
+
minimize
照片和图片 / fas
+
panorama
照片和图片 / fas
+
photo film
照片和图片 / fas
+
sliders
照片和图片 / fas
+
unsplash
照片和图片 / fab
+
award
政治 / fas
+
building flag
政治 / fas
+
bullhorn
政治 / fas
+
check double
政治 / fas
+
check to slot
政治 / fas
+
circle dollar to slot
政治 / fas
+
democrat
政治 / fas
+
dove
政治 / fas
+
dumpster fire
政治 / fas
+
flag usa
政治 / fas
+
hand fist
政治 / fas
+
handshake
政治 / far
+
handshake
政治 / fas
+
landmark dome
政治 / fas
+
landmark flag
政治 / fas
+
person booth
政治 / fas
+
piggy bank
政治 / fas
+
republican
政治 / fas
+
scale balanced
政治 / fas
+
scale unbalanced
政治 / fas
+
scale unbalanced flip
政治 / fas
+
A
a
字母 / fas
+
B
b
字母 / fas
+
C
c
字母 / fas
+
circle h
字母 / fas
+
D
d
字母 / fas
+
E
e
字母 / fas
+
F
f
字母 / fas
+
G
g
字母 / fas
+
H
h
字母 / fas
+
I
i
字母 / fas
+
J
j
字母 / fas
+
K
k
字母 / fas
+
L
l
字母 / fas
+
M
m
字母 / fas
+
N
n
字母 / fas
+
O
o
字母 / fas
+
P
p
字母 / fas
+
Q
q
字母 / fas
+
R
r
字母 / fas
+
S
s
字母 / fas
+
square h
字母 / fas
+
T
t
字母 / fas
+
U
u
字母 / fas
+
V
v
字母 / fas
+
W
w
字母 / fas
+
X
x
字母 / fas
+
Y
y
字母 / fas
+
Z
z
字母 / fas
+
binoculars
自然 / fas
+
bug
自然 / fas
+
bugs
自然 / fas
+
cannabis
自然 / fas
+
cloud sun
自然 / fas
+
clover
自然 / fas
+
feather
自然 / fas
+
feather pointed
自然 / fas
+
fire
自然 / fas
+
frog
自然 / fas
+
icicles
自然 / fas
+
leaf
自然 / fas
+
locust
自然 / fas
+
mosquito
自然 / fas
+
mound
自然 / fas
+
mountain
自然 / fas
+
mountain city
自然 / fas
+
mountain sun
自然 / fas
+
person hiking
自然 / fas
+
plant wilt
自然 / fas
+
seedling
自然 / fas
+
signs post
自然 / fas
+
spider
自然 / fas
+
tree
自然 / fas
+
volcano
自然 / fas
+
water
自然 / fas
+
wind
自然 / fas
+
worm
自然 / fas
+
ankh
宗教 / fas
+
atom
宗教 / fas
+
bahai
宗教 / fas
+
book bible
宗教 / fas
+
book journal whills
宗教 / fas
+
book quran
宗教 / fas
+
book tanakh
宗教 / fas
+
church
宗教 / fas
+
cross
宗教 / fas
+
dharmachakra
宗教 / fas
+
dove
宗教 / fas
+
gopuram
宗教 / fas
+
hamsa
宗教 / fas
+
hands praying
宗教 / fas
+
hanukiah
宗教 / fas
+
jedi
宗教 / fas
+
kaaba
宗教 / fas
+
khanda
宗教 / fas
+
menorah
宗教 / fas
+
mosque
宗教 / fas
+
om
宗教 / fas
+
peace
宗教 / fas
+
person praying
宗教 / fas
+
place of worship
宗教 / fas
+
scroll torah
宗教 / fas
+
spaghetti monster flying
宗教 / fas
+
star and crescent
宗教 / fas
+
star of david
宗教 / fas
+
synagogue
宗教 / fas
+
torii gate
宗教 / fas
+
vihara
宗教 / fas
+
yin yang
宗教 / fas
+ + \ No newline at end of file diff --git a/rust/crates/bridge-runtime/src/lib.rs b/rust/crates/bridge-runtime/src/lib.rs index e0bbebc7..1324190d 100644 --- a/rust/crates/bridge-runtime/src/lib.rs +++ b/rust/crates/bridge-runtime/src/lib.rs @@ -9150,6 +9150,10 @@ fn normalize_editor_block_type_for_save(raw_type: &str) -> EditorBlockType { "todo" | "task" => EditorBlockType::Todo, "quote" | "blockquote" => EditorBlockType::Quote, "code" | "code_block" | "code-block" => EditorBlockType::CodeBlock, + "divider" | "horizontal_rule" | "horizontalrule" => EditorBlockType::Divider, + "table" => EditorBlockType::Table, + "image" | "picture" => EditorBlockType::Image, + "toc" | "toc_node" | "tocnode" => EditorBlockType::Toc, "page_reference" => EditorBlockType::PageReference, "block_reference" => EditorBlockType::BlockReference, _ => EditorBlockType::Paragraph, @@ -9174,6 +9178,11 @@ fn normalize_editor_block_from_legacy(block: &Value, index: usize) -> EditorBloc .and_then(Value::as_u64) .and_then(|value| u8::try_from(value).ok()) .map(|value| value.clamp(1, 6)); + props.collapsed = block + .get("props") + .and_then(Value::as_object) + .and_then(|map| map.get("collapsed")) + .and_then(Value::as_bool); } if matches!( normalize_editor_block_type_for_save(&raw_type), @@ -9196,6 +9205,30 @@ fn normalize_editor_block_from_legacy(block: &Value, index: usize) -> EditorBloc .and_then(Value::as_str) .map(ToOwned::to_owned); } + if let Some(tiptap_table) = block + .get("props") + .and_then(Value::as_object) + .and_then(|map| map.get("tiptapTable")) + .cloned() + { + props.extra.insert("tiptapTable".into(), tiptap_table); + } + if let Some(tiptap_image) = block + .get("props") + .and_then(Value::as_object) + .and_then(|map| map.get("tiptapImage")) + .cloned() + { + props.extra.insert("tiptapImage".into(), tiptap_image); + } + if let Some(tiptap_toc) = block + .get("props") + .and_then(Value::as_object) + .and_then(|map| map.get("tiptapTocNode").or_else(|| map.get("tiptapToc"))) + .cloned() + { + props.extra.insert("tiptapTocNode".into(), tiptap_toc); + } let text = read_trimmed_string_field(block, &["content"]) .filter(|value| !value.is_empty()) .unwrap_or_else(|| extract_inline_text(block)); @@ -9265,17 +9298,83 @@ fn normalize_save_editor_document( } fn legacy_props_from_editor_block(block: &EditorBlock) -> Option { + let mut props = serde_json::Map::new(); match block.block_type { - EditorBlockType::Heading => Some(json!({ - "level": block.props.heading_level.unwrap_or(1), - })), - EditorBlockType::Todo => Some(json!({ - "checked": block.props.checked.unwrap_or(false), - })), - EditorBlockType::CodeBlock => Some(json!({ - "language": block.props.language, - })), - _ => None, + EditorBlockType::Heading => { + props.insert( + "level".into(), + json!(block.props.heading_level.unwrap_or(1)), + ); + if let Some(collapsed) = block.props.collapsed { + props.insert("collapsed".into(), json!(collapsed)); + } + } + EditorBlockType::Todo => { + props.insert( + "checked".into(), + json!(block.props.checked.unwrap_or(false)), + ); + } + EditorBlockType::CodeBlock => { + props.insert("language".into(), json!(block.props.language)); + } + EditorBlockType::Table => { + if let Some(tiptap_table) = block.props.extra.get("tiptapTable") { + props.insert("tiptapTable".into(), tiptap_table.clone()); + } + } + EditorBlockType::Image => { + if let Some(tiptap_image) = block.props.extra.get("tiptapImage") { + props.insert("tiptapImage".into(), tiptap_image.clone()); + if let Some(attrs) = tiptap_image.get("attrs").and_then(Value::as_object) { + for key in ["src", "alt", "title"] { + if let Some(value) = attrs.get(key) { + props.insert(key.into(), value.clone()); + } + } + } + } + } + EditorBlockType::Toc => { + if let Some(tiptap_toc) = block.props.extra.get("tiptapTocNode") { + props.insert("tiptapTocNode".into(), tiptap_toc.clone()); + } + } + _ => {} + } + if let Some(text_align) = block + .props + .extra + .get("textAlign") + .or_else(|| block.props.extra.get("text_align")) + .and_then(Value::as_str) + .map(str::trim) + .filter(|value| matches!(*value, "left" | "center" | "right" | "justify")) + { + props.insert("textAlign".into(), json!(text_align)); + } + if props.is_empty() { + None + } else { + Some(Value::Object(props)) + } +} + +fn legacy_type_from_editor_block(block: &EditorBlock) -> &'static str { + match block.block_type { + EditorBlockType::Paragraph => "paragraph", + EditorBlockType::Heading => "heading", + EditorBlockType::BulletListItem => "bullet_list_item", + EditorBlockType::NumberedListItem => "numbered_list_item", + EditorBlockType::Quote => "blockquote", + EditorBlockType::Todo => "todo", + EditorBlockType::CodeBlock => "code_block", + EditorBlockType::Divider => "divider", + EditorBlockType::Table => "table", + EditorBlockType::Image => "image", + EditorBlockType::Toc => "toc", + EditorBlockType::PageReference => "page_reference", + EditorBlockType::BlockReference => "block_reference", } } @@ -9292,6 +9391,54 @@ fn legacy_text_from_editor_block(block: &EditorBlock) -> String { } fn legacy_content_from_editor_document(document: &EditorBlockDocument) -> Value { + fn block_to_legacy_value(block: &EditorBlock, document: &EditorBlockDocument) -> Value { + let children = block + .child_block_ids + .iter() + .filter_map(|child_id| { + document + .blocks + .iter() + .find(|candidate| &candidate.block_id == child_id) + }) + .map(|child| block_to_legacy_value(child, document)) + .collect::>(); + + let mut value = json!({ + "id": block.block_id, + "type": legacy_type_from_editor_block(block), + "props": legacy_props_from_editor_block(block), + "content": if matches!(block.block_type, EditorBlockType::Divider) { + Value::Array(Vec::new()) + } else { + Value::String(legacy_text_from_editor_block(block)) + }, + }); + if !children.is_empty() { + if let Value::Object(map) = &mut value { + map.insert("children".into(), Value::Array(children)); + } + } + value + } + + fn mark_block_tree_seen( + block: &EditorBlock, + document: &EditorBlockDocument, + seen: &mut std::collections::BTreeSet, + ) { + seen.insert(block.block_id.clone()); + for child_id in &block.child_block_ids { + if let Some(child) = document + .blocks + .iter() + .find(|candidate| &candidate.block_id == child_id) + { + mark_block_tree_seen(child, document, seen); + } + } + } + let mut ordered = Vec::<&EditorBlock>::new(); let mut seen = std::collections::BTreeSet::::new(); for root_block_id in &document.root_block_ids { @@ -9300,7 +9447,7 @@ fn legacy_content_from_editor_document(document: &EditorBlockDocument) -> Value .iter() .find(|block| &block.block_id == root_block_id) { - seen.insert(block.block_id.clone()); + mark_block_tree_seen(block, document, &mut seen); ordered.push(block); } } @@ -9313,14 +9460,7 @@ fn legacy_content_from_editor_document(document: &EditorBlockDocument) -> Value Value::Array( ordered .into_iter() - .map(|block| { - json!({ - "id": block.block_id, - "type": block.block_type, - "props": legacy_props_from_editor_block(block), - "content": legacy_text_from_editor_block(block), - }) - }) + .map(|block| block_to_legacy_value(block, document)) .collect(), ) } @@ -10607,6 +10747,299 @@ mod tests { ); } + #[test] + fn documents_save_command_plan_preserves_horizontal_rule_as_divider() { + let plan = execute_runtime_input(RuntimeInput::Command { + context: demo_context(), + command: RuntimeCommandEnvelopeWire { + name: "documents.save".into(), + command_id: "cmd_save_divider".into(), + idempotency_key: Some("idem_save_divider".into()), + actor: RuntimeActorWire { + actor_type: "user".into(), + actor_id: "user_1".into(), + session_id: Some("sess_1".into()), + }, + source: RuntimeSourceWire { + channel: "rust-web".into(), + client: "mnote-web".into(), + }, + target: Some(RuntimeTargetWire { + workspace_id: Some("ws_1".into()), + page_id: Some("doc_1".into()), + block_id: None, + }), + payload: json!({ + "documentId": "doc_1", + "workspaceId": "ws_1", + "revision": 5, + "content": [], + "tiptapDocument": { + "type": "doc", + "content": [ + { + "type": "horizontalRule", + "attrs": { + "blockId": "divider_1" + } + } + ] + }, + "conflictDetectionKey": "doc_1:5" + }), + preflight_data: None, + reason: Some("保存分割线".into()), + refs: vec!["phase-e-divider".into()], + dry_run: false, + validate_only: false, + }, + }) + .expect("documents.save horizontalRule plan should build"); + + let RuntimeExecutionPlan::Command(plan) = plan else { + panic!("expected command plan"); + }; + + assert_eq!( + plan.args_json.pointer("/editorDocument/blocks/0/blockType"), + Some(&json!("divider")) + ); + assert_eq!( + plan.args_json.pointer("/content/0/type"), + Some(&json!("divider")) + ); + assert_eq!( + plan.args_json.pointer("/content/0/content"), + Some(&json!([])) + ); + } + + #[test] + fn documents_save_command_plan_preserves_tiptap_image() { + let plan = execute_runtime_input(RuntimeInput::Command { + context: demo_context(), + command: RuntimeCommandEnvelopeWire { + name: "documents.save".into(), + command_id: "cmd_save_image".into(), + idempotency_key: Some("idem_save_image".into()), + actor: RuntimeActorWire { + actor_type: "user".into(), + actor_id: "user_1".into(), + session_id: Some("sess_1".into()), + }, + source: RuntimeSourceWire { + channel: "rust-web".into(), + client: "mnote-web".into(), + }, + target: Some(RuntimeTargetWire { + workspace_id: Some("ws_1".into()), + page_id: Some("doc_1".into()), + block_id: None, + }), + payload: json!({ + "documentId": "doc_1", + "workspaceId": "ws_1", + "revision": 5, + "content": [], + "tiptapDocument": { + "type": "doc", + "content": [{ + "type": "image", + "attrs": { + "src": "/api/editor/image-placeholder.svg", + "alt": "E24 图片占位", + "title": "E24 图片" + } + }] + }, + "conflictDetectionKey": "doc_1:5" + }), + preflight_data: None, + reason: Some("保存图片".into()), + refs: vec!["phase-e-image".into()], + dry_run: false, + validate_only: false, + }, + }) + .expect("documents.save image plan should build"); + + let RuntimeExecutionPlan::Command(plan) = plan else { + panic!("expected command plan"); + }; + + assert_eq!( + plan.args_json.pointer("/editorDocument/blocks/0/blockType"), + Some(&json!("image")) + ); + assert_eq!( + plan.args_json.pointer("/content/0/type"), + Some(&json!("image")) + ); + assert_eq!( + plan.args_json.pointer("/content/0/props/tiptapImage/type"), + Some(&json!("image")) + ); + assert_eq!( + plan.args_json.pointer("/content/0/props/src"), + Some(&json!("/api/editor/image-placeholder.svg")) + ); + } + + #[test] + fn documents_save_command_plan_preserves_tiptap_table() { + let plan = execute_runtime_input(RuntimeInput::Command { + context: demo_context(), + command: RuntimeCommandEnvelopeWire { + name: "documents.save".into(), + command_id: "cmd_save_table".into(), + idempotency_key: Some("idem_save_table".into()), + actor: RuntimeActorWire { + actor_type: "user".into(), + actor_id: "user_1".into(), + session_id: Some("sess_1".into()), + }, + source: RuntimeSourceWire { + channel: "rust-web".into(), + client: "mnote-web".into(), + }, + target: Some(RuntimeTargetWire { + workspace_id: Some("ws_1".into()), + page_id: Some("doc_1".into()), + block_id: None, + }), + payload: json!({ + "documentId": "doc_1", + "workspaceId": "ws_1", + "revision": 5, + "content": [], + "tiptapDocument": { + "type": "doc", + "content": [{ + "type": "table", + "attrs": { "blockId": "table_1" }, + "content": [{ + "type": "tableRow", + "content": [{ + "type": "tableCell", + "attrs": { "colspan": 1, "rowspan": 1, "colwidth": null }, + "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "A1" }] }] + }] + }] + }] + }, + "conflictDetectionKey": "doc_1:5" + }), + preflight_data: None, + reason: Some("保存简单表格".into()), + refs: vec!["phase-e-table".into()], + dry_run: false, + validate_only: false, + }, + }) + .expect("documents.save table plan should build"); + + let RuntimeExecutionPlan::Command(plan) = plan else { + panic!("expected command plan"); + }; + + assert_eq!( + plan.args_json.pointer("/editorDocument/blocks/0/blockType"), + Some(&json!("table")) + ); + assert_eq!( + plan.args_json.pointer("/content/0/type"), + Some(&json!("table")) + ); + assert_eq!( + plan.args_json.pointer("/content/0/props/tiptapTable/type"), + Some(&json!("table")) + ); + assert_eq!( + plan.args_json.pointer("/content/0/content"), + Some(&json!("A1")) + ); + } + + #[test] + fn documents_save_command_plan_preserves_nested_list_children() { + let plan = execute_runtime_input(RuntimeInput::Command { + context: demo_context(), + command: RuntimeCommandEnvelopeWire { + name: "documents.save".into(), + command_id: "cmd_save_nested_list".into(), + idempotency_key: Some("idem_save_nested_list".into()), + actor: RuntimeActorWire { + actor_type: "user".into(), + actor_id: "user_1".into(), + session_id: Some("sess_1".into()), + }, + source: RuntimeSourceWire { + channel: "rust-web".into(), + client: "mnote-web".into(), + }, + target: Some(RuntimeTargetWire { + workspace_id: Some("ws_1".into()), + page_id: Some("doc_1".into()), + block_id: None, + }), + payload: json!({ + "documentId": "doc_1", + "workspaceId": "ws_1", + "revision": 5, + "content": [], + "tiptapDocument": { + "type": "doc", + "content": [{ + "type": "bulletList", + "content": [{ + "type": "listItem", + "attrs": { "blockId": "parent" }, + "content": [ + { "type": "paragraph", "content": [{ "type": "text", "text": "E19 parent" }] }, + { "type": "bulletList", "content": [{ + "type": "listItem", + "attrs": { "blockId": "child" }, + "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "E19 child" }] }] + }]} + ] + }] + }] + }, + "conflictDetectionKey": "doc_1:5" + }), + preflight_data: None, + reason: Some("保存嵌套列表".into()), + refs: vec!["phase-e-indent".into()], + dry_run: false, + validate_only: false, + }, + }) + .expect("documents.save nested list plan should build"); + + let RuntimeExecutionPlan::Command(plan) = plan else { + panic!("expected command plan"); + }; + + assert_eq!( + plan.args_json.pointer("/editorDocument/rootBlockIds"), + Some(&json!(["parent"])) + ); + assert_eq!( + plan.args_json + .pointer("/editorDocument/blocks/0/childBlockIds"), + Some(&json!(["child"])) + ); + assert_eq!( + plan.args_json.pointer("/content/0/children/0/type"), + Some(&json!("bullet_list_item")) + ); + assert_eq!( + plan.args_json.pointer("/content/0/children/0/content"), + Some(&json!("E19 child")) + ); + assert_eq!(plan.args_json.pointer("/content/1"), None); + } + #[test] fn page_body_save_command_plan_uses_canonical_page_command() { let plan = execute_runtime_input(RuntimeInput::Command { diff --git a/rust/crates/core-protocol/src/editor/model.rs b/rust/crates/core-protocol/src/editor/model.rs index 8383b027..26430740 100644 --- a/rust/crates/core-protocol/src/editor/model.rs +++ b/rust/crates/core-protocol/src/editor/model.rs @@ -12,6 +12,10 @@ pub enum EditorBlockType { Quote, Todo, CodeBlock, + Divider, + Table, + Image, + Toc, PageReference, BlockReference, } diff --git a/rust/crates/core-protocol/src/editor/tiptap.rs b/rust/crates/core-protocol/src/editor/tiptap.rs index 414ffc32..3a088c6d 100644 --- a/rust/crates/core-protocol/src/editor/tiptap.rs +++ b/rust/crates/core-protocol/src/editor/tiptap.rs @@ -3,6 +3,7 @@ use crate::editor::model::{ TextMark, }; use serde::{Deserialize, Serialize}; +use serde_json::Value; use std::collections::BTreeMap; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] @@ -17,6 +18,13 @@ pub enum TiptapBlockType { TaskItem, Blockquote, CodeBlock, + HorizontalRule, + Table, + Image, + TocNode, + TableRow, + TableCell, + TableHeader, Text, HardBreak, Doc, @@ -28,6 +36,10 @@ pub struct TiptapHeadingAttrs { pub level: u8, #[serde(default)] pub block_id: Option, + #[serde(default)] + pub text_align: Option, + #[serde(default)] + pub collapsed: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] @@ -44,6 +56,8 @@ pub struct TiptapTaskItemAttrs { pub struct TiptapParagraphAttrs { #[serde(default)] pub block_id: Option, + #[serde(default)] + pub text_align: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] @@ -65,6 +79,8 @@ pub struct TiptapListItemAttrs { pub struct TiptapBlockquoteAttrs { #[serde(default)] pub block_id: Option, + #[serde(default)] + pub text_align: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] @@ -72,6 +88,66 @@ pub struct TiptapBlockquoteAttrs { pub struct TiptapCodeBlockAttrs { pub language: Option, pub block_id: Option, + #[serde(default)] + pub text_align: Option, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[serde(rename_all = "camelCase")] +pub struct TiptapHorizontalRuleAttrs { + #[serde(default)] + pub block_id: Option, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[serde(rename_all = "camelCase")] +pub struct TiptapImageAttrs { + pub src: String, + #[serde(default)] + pub alt: Option, + #[serde(default)] + pub title: Option, + #[serde(default)] + pub block_id: Option, + #[serde(flatten)] + pub extra: BTreeMap, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[serde(rename_all = "camelCase")] +pub struct TiptapTableAttrs { + #[serde(default)] + pub block_id: Option, + #[serde(flatten)] + pub extra: BTreeMap, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[serde(rename_all = "camelCase")] +pub struct TiptapTocNodeAttrs { + #[serde(default)] + pub top_offset: Option, + #[serde(default)] + pub max_show_count: Option, + #[serde(default)] + pub show_title: Option, + #[serde(default)] + pub block_id: Option, + #[serde(flatten)] + pub extra: BTreeMap, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] +#[serde(rename_all = "camelCase")] +pub struct TiptapTableCellAttrs { + #[serde(default)] + pub colspan: Option, + #[serde(default)] + pub rowspan: Option, + #[serde(default)] + pub colwidth: Value, + #[serde(flatten)] + pub extra: BTreeMap, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] @@ -137,6 +213,41 @@ pub enum TiptapNode { #[serde(default)] content: Vec, }, + HorizontalRule { + #[serde(default)] + attrs: TiptapHorizontalRuleAttrs, + }, + Image { + attrs: TiptapImageAttrs, + }, + Table { + #[serde(default)] + attrs: TiptapTableAttrs, + #[serde(default)] + content: Vec, + }, + TocNode { + #[serde(default)] + attrs: TiptapTocNodeAttrs, + }, + TableRow { + #[serde(default)] + attrs: BTreeMap, + #[serde(default)] + content: Vec, + }, + TableCell { + #[serde(default)] + attrs: TiptapTableCellAttrs, + #[serde(default)] + content: Vec, + }, + TableHeader { + #[serde(default)] + attrs: TiptapTableCellAttrs, + #[serde(default)] + content: Vec, + }, Text { text: String, #[serde(default)] @@ -153,6 +264,113 @@ pub enum EditorBlockDocumentTiptapError { pub struct EditorBlockDocumentTiptapBridge; +fn text_align_from_props(props: &BlockProps) -> Option { + props + .extra + .get("textAlign") + .or_else(|| props.extra.get("text_align")) + .and_then(|value| value.as_str()) + .map(str::trim) + .filter(|value| matches!(*value, "left" | "center" | "right" | "justify")) + .map(ToOwned::to_owned) +} + +fn table_snapshot_from_props(props: &BlockProps) -> Option { + props + .extra + .get("tiptapTable") + .cloned() + .and_then(|value| serde_json::from_value::(value).ok()) +} + +fn image_snapshot_from_props(props: &BlockProps) -> Option { + props + .extra + .get("tiptapImage") + .cloned() + .and_then(|value| serde_json::from_value::(value).ok()) +} + +fn toc_snapshot_from_props(props: &BlockProps) -> Option { + props + .extra + .get("tiptapTocNode") + .or_else(|| props.extra.get("tiptapToc")) + .cloned() + .and_then(|value| serde_json::from_value::(value).ok()) +} + +fn props_with_image_snapshot(node: &TiptapNode) -> BlockProps { + let mut props = BlockProps::default(); + if let Ok(value) = serde_json::to_value(node) { + props.extra.insert("tiptapImage".into(), value); + } + props +} + +fn props_with_table_snapshot(node: &TiptapNode) -> BlockProps { + let mut props = BlockProps::default(); + if let Ok(value) = serde_json::to_value(node) { + props.extra.insert("tiptapTable".into(), value); + } + props +} + +fn props_with_toc_snapshot(node: &TiptapNode) -> BlockProps { + let mut props = BlockProps::default(); + if let Ok(value) = serde_json::to_value(node) { + props.extra.insert("tiptapTocNode".into(), value); + } + props +} + +fn collect_table_text_nodes(nodes: &[TiptapNode], out: &mut Vec) { + for node in nodes { + match node { + TiptapNode::Text { text, marks } => out.push(ContentNode { + payload: ContentNodePayload::Text { + text: text.clone(), + marks: marks.iter().filter_map(tiptap_mark_to_text_mark).collect(), + }, + attrs: BTreeMap::new(), + }), + TiptapNode::HardBreak => out.push(ContentNode { + payload: ContentNodePayload::HardBreak, + attrs: BTreeMap::new(), + }), + TiptapNode::Doc { content } + | TiptapNode::Paragraph { content, .. } + | TiptapNode::Heading { content, .. } + | TiptapNode::BulletList { content, .. } + | TiptapNode::OrderedList { content, .. } + | TiptapNode::TaskList { content, .. } + | TiptapNode::ListItem { content, .. } + | TiptapNode::TaskItem { content, .. } + | TiptapNode::Blockquote { content, .. } + | TiptapNode::CodeBlock { content, .. } + | TiptapNode::Table { content, .. } + | TiptapNode::TableRow { content, .. } + | TiptapNode::TableCell { content, .. } + | TiptapNode::TableHeader { content, .. } => collect_table_text_nodes(content, out), + TiptapNode::HorizontalRule { .. } + | TiptapNode::Image { .. } + | TiptapNode::TocNode { .. } => {} + } + } +} + +fn props_with_text_align(text_align: Option) -> BlockProps { + let mut props = BlockProps::default(); + if let Some(text_align) = text_align + .as_deref() + .map(str::trim) + .filter(|value| matches!(*value, "left" | "center" | "right" | "justify")) + { + props.extra.insert("textAlign".into(), text_align.into()); + } + props +} + impl EditorBlockDocumentTiptapBridge { pub fn to_tiptap_doc( document: &EditorBlockDocument, @@ -166,7 +384,7 @@ impl EditorBlockDocumentTiptapBridge { .ok_or(EditorBlockDocumentTiptapError::InvalidDocument( "根块不存在", ))?; - content.push(block_to_tiptap_node(block)?); + content.push(block_to_tiptap_node(block, document)?); } Ok(TiptapNode::Doc { content }) } @@ -180,9 +398,9 @@ impl EditorBlockDocumentTiptapBridge { let mut blocks = Vec::new(); let mut root_block_ids = Vec::new(); for (index, node) in content.iter().enumerate() { - let block = node_to_block(node, index)?; - root_block_ids.push(block.block_id.clone()); - blocks.push(block); + let (node_root_ids, mut node_blocks) = node_to_blocks(node, index)?; + root_block_ids.extend(node_root_ids); + blocks.append(&mut node_blocks); } Ok(EditorBlockDocument { document_id: document_id.into(), @@ -197,12 +415,82 @@ impl EditorBlockDocumentTiptapBridge { } } -fn block_to_tiptap_node(block: &EditorBlock) -> Result { +fn node_to_blocks( + node: &TiptapNode, + index: usize, +) -> Result<(Vec, Vec), EditorBlockDocumentTiptapError> { + match node { + TiptapNode::BulletList { attrs, content } => list_node_to_blocks( + attrs.block_id.as_deref(), + EditorBlockType::BulletListItem, + content, + &format!("block_{}", index + 1), + ), + TiptapNode::OrderedList { attrs, content } => list_node_to_blocks( + attrs.block_id.as_deref(), + EditorBlockType::NumberedListItem, + content, + &format!("block_{}", index + 1), + ), + TiptapNode::TaskList { attrs, content } => list_node_to_blocks( + attrs.block_id.as_deref(), + EditorBlockType::Todo, + content, + &format!("block_{}", index + 1), + ), + _ => { + let block = node_to_block(node, index)?; + Ok((vec![block.block_id.clone()], vec![block])) + } + } +} + +fn block_child_tiptap_nodes( + block: &EditorBlock, + document: &EditorBlockDocument, +) -> Result, EditorBlockDocumentTiptapError> { + block + .child_block_ids + .iter() + .map(|child_id| { + let child = document + .blocks + .iter() + .find(|candidate| &candidate.block_id == child_id) + .ok_or(EditorBlockDocumentTiptapError::InvalidDocument( + "子块不存在", + ))?; + block_to_tiptap_node(child, document) + }) + .collect() +} + +fn list_item_content_from_block( + block: &EditorBlock, + inline_content: Vec, + document: &EditorBlockDocument, +) -> Result, EditorBlockDocumentTiptapError> { + let mut content = vec![TiptapNode::Paragraph { + attrs: TiptapParagraphAttrs { + block_id: Some(block.block_id.clone()), + text_align: text_align_from_props(&block.props), + }, + content: inline_content, + }]; + content.extend(block_child_tiptap_nodes(block, document)?); + Ok(content) +} + +fn block_to_tiptap_node( + block: &EditorBlock, + document: &EditorBlockDocument, +) -> Result { let content = text_nodes_to_tiptap(&block.content_nodes)?; match block.block_type { EditorBlockType::Paragraph => Ok(TiptapNode::Paragraph { attrs: TiptapParagraphAttrs { block_id: Some(block.block_id.clone()), + text_align: text_align_from_props(&block.props), }, content, }), @@ -210,6 +498,8 @@ fn block_to_tiptap_node(block: &EditorBlock) -> Result Result Ok(TiptapNode::OrderedList { @@ -237,12 +522,7 @@ fn block_to_tiptap_node(block: &EditorBlock) -> Result Ok(TiptapNode::TaskList { @@ -254,21 +534,18 @@ fn block_to_tiptap_node(block: &EditorBlock) -> Result Ok(TiptapNode::Blockquote { attrs: TiptapBlockquoteAttrs { block_id: Some(block.block_id.clone()), + text_align: text_align_from_props(&block.props), }, content: vec![TiptapNode::Paragraph { attrs: TiptapParagraphAttrs { block_id: Some(block.block_id.clone()), + text_align: text_align_from_props(&block.props), }, content, }], @@ -277,9 +554,24 @@ fn block_to_tiptap_node(block: &EditorBlock) -> Result Ok(TiptapNode::HorizontalRule { + attrs: TiptapHorizontalRuleAttrs { + block_id: Some(block.block_id.clone()), + }, + }), + EditorBlockType::Table => table_snapshot_from_props(&block.props).ok_or( + EditorBlockDocumentTiptapError::InvalidDocument("表格块缺少 Tiptap 快照"), + ), + EditorBlockType::Image => image_snapshot_from_props(&block.props).ok_or( + EditorBlockDocumentTiptapError::InvalidDocument("图片块缺少 Tiptap 快照"), + ), + EditorBlockType::Toc => toc_snapshot_from_props(&block.props).ok_or( + EditorBlockDocumentTiptapError::InvalidDocument("目录块缺少 Tiptap 快照"), + ), _ => Err(EditorBlockDocumentTiptapError::UnsupportedNode( "当前块型暂不支持导出到 Tiptap", )), @@ -295,7 +587,7 @@ fn node_to_block( TiptapNode::Paragraph { attrs, content } => Ok(EditorBlock { block_id: attrs.block_id.clone().unwrap_or(fallback_block_id), block_type: EditorBlockType::Paragraph, - props: BlockProps::default(), + props: props_with_text_align(attrs.text_align.clone()), content_nodes: text_nodes_from_tiptap(content)?, child_block_ids: vec![], }), @@ -304,7 +596,8 @@ fn node_to_block( block_type: EditorBlockType::Heading, props: BlockProps { heading_level: Some(attrs.level), - ..BlockProps::default() + collapsed: attrs.collapsed, + ..props_with_text_align(attrs.text_align.clone()) }, content_nodes: text_nodes_from_tiptap(content)?, child_block_ids: vec![], @@ -325,7 +618,7 @@ fn node_to_block( TiptapNode::Blockquote { attrs, content } => Ok(EditorBlock { block_id: attrs.block_id.clone().unwrap_or(fallback_block_id), block_type: EditorBlockType::Quote, - props: BlockProps::default(), + props: props_with_text_align(attrs.text_align.clone()), content_nodes: text_nodes_from_tiptap(extract_block_container_content(content)?)?, child_block_ids: vec![], }), @@ -334,11 +627,43 @@ fn node_to_block( block_type: EditorBlockType::CodeBlock, props: BlockProps { language: attrs.language.clone(), - ..BlockProps::default() + ..props_with_text_align(attrs.text_align.clone()) }, content_nodes: text_nodes_from_tiptap(content)?, child_block_ids: vec![], }), + TiptapNode::HorizontalRule { attrs } => Ok(EditorBlock { + block_id: attrs.block_id.clone().unwrap_or(fallback_block_id), + block_type: EditorBlockType::Divider, + props: BlockProps::default(), + content_nodes: vec![], + child_block_ids: vec![], + }), + TiptapNode::Table { attrs, content } => { + let mut content_nodes = Vec::new(); + collect_table_text_nodes(content, &mut content_nodes); + Ok(EditorBlock { + block_id: attrs.block_id.clone().unwrap_or(fallback_block_id), + block_type: EditorBlockType::Table, + props: props_with_table_snapshot(node), + content_nodes, + child_block_ids: vec![], + }) + } + TiptapNode::Image { attrs } => Ok(EditorBlock { + block_id: attrs.block_id.clone().unwrap_or(fallback_block_id), + block_type: EditorBlockType::Image, + props: props_with_image_snapshot(node), + content_nodes: vec![], + child_block_ids: vec![], + }), + TiptapNode::TocNode { attrs } => Ok(EditorBlock { + block_id: attrs.block_id.clone().unwrap_or(fallback_block_id), + block_type: EditorBlockType::Toc, + props: props_with_toc_snapshot(node), + content_nodes: vec![], + child_block_ids: vec![], + }), _ => Err(EditorBlockDocumentTiptapError::UnsupportedNode( "当前节点暂不支持导入为 EditorBlockDocument", )), @@ -359,6 +684,112 @@ fn list_node_to_block( }) } +fn list_node_to_blocks( + list_block_id: Option<&str>, + block_type: EditorBlockType, + content: &[TiptapNode], + fallback_prefix: &str, +) -> Result<(Vec, Vec), EditorBlockDocumentTiptapError> { + let mut root_ids = Vec::new(); + let mut blocks = Vec::new(); + let use_list_id_for_single_item = content.len() == 1; + + for (index, item) in content.iter().enumerate() { + let fallback_block_id = if use_list_id_for_single_item { + list_block_id + .map(ToOwned::to_owned) + .unwrap_or_else(|| fallback_prefix.to_string()) + } else { + format!("{fallback_prefix}_item_{}", index + 1) + }; + let (block, mut child_blocks) = list_item_node_to_block( + item, + block_type.clone(), + &fallback_block_id, + &format!("{fallback_prefix}_child_{}", index + 1), + )?; + root_ids.push(block.block_id.clone()); + blocks.push(block); + blocks.append(&mut child_blocks); + } + + Ok((root_ids, blocks)) +} + +fn list_item_node_to_block( + item: &TiptapNode, + block_type: EditorBlockType, + fallback_block_id: &str, + child_fallback_prefix: &str, +) -> Result<(EditorBlock, Vec), EditorBlockDocumentTiptapError> { + let (block_id, checked, content) = match item { + TiptapNode::ListItem { attrs, content } => ( + attrs + .block_id + .clone() + .unwrap_or_else(|| fallback_block_id.to_string()), + None, + content, + ), + TiptapNode::TaskItem { attrs, content } => ( + attrs + .block_id + .clone() + .unwrap_or_else(|| fallback_block_id.to_string()), + Some(attrs.checked), + content, + ), + _ => { + return Err(EditorBlockDocumentTiptapError::InvalidDocument( + "列表节点首子节点类型不正确", + )) + } + }; + + let inline_content = extract_block_container_content(content)?; + let mut child_block_ids = Vec::new(); + let mut child_blocks = Vec::new(); + for (index, child) in content.iter().enumerate() { + let (child_root_ids, mut nested_blocks) = match child { + TiptapNode::BulletList { attrs, content } => list_node_to_blocks( + attrs.block_id.as_deref(), + EditorBlockType::BulletListItem, + content, + &format!("{child_fallback_prefix}_bullet_{}", index + 1), + )?, + TiptapNode::OrderedList { attrs, content } => list_node_to_blocks( + attrs.block_id.as_deref(), + EditorBlockType::NumberedListItem, + content, + &format!("{child_fallback_prefix}_ordered_{}", index + 1), + )?, + TiptapNode::TaskList { attrs, content } => list_node_to_blocks( + attrs.block_id.as_deref(), + EditorBlockType::Todo, + content, + &format!("{child_fallback_prefix}_task_{}", index + 1), + )?, + _ => continue, + }; + child_block_ids.extend(child_root_ids); + child_blocks.append(&mut nested_blocks); + } + + Ok(( + EditorBlock { + block_id, + block_type, + props: BlockProps { + checked, + ..BlockProps::default() + }, + content_nodes: text_nodes_from_tiptap(inline_content)?, + child_block_ids, + }, + child_blocks, + )) +} + fn list_task_node_to_block( block_id: String, content: &[TiptapNode], @@ -492,3 +923,224 @@ fn tiptap_mark_to_text_mark(mark: &TiptapMark) -> Option { _ => None, } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn converts_horizontal_rule_to_divider_block() { + let doc = TiptapNode::Doc { + content: vec![TiptapNode::HorizontalRule { + attrs: TiptapHorizontalRuleAttrs { + block_id: Some("divider_1".into()), + }, + }], + }; + + let parsed = EditorBlockDocumentTiptapBridge::from_tiptap_doc("doc_1", &doc) + .expect("horizontalRule should convert to divider"); + + assert_eq!(parsed.root_block_ids, vec!["divider_1"]); + assert_eq!(parsed.blocks[0].block_type, EditorBlockType::Divider); + assert!(parsed.blocks[0].content_nodes.is_empty()); + } + + #[test] + fn converts_divider_block_to_horizontal_rule() { + let document = EditorBlockDocument { + document_id: "doc_1".into(), + root_block_ids: vec!["divider_1".into()], + blocks: vec![EditorBlock { + block_id: "divider_1".into(), + block_type: EditorBlockType::Divider, + props: BlockProps::default(), + content_nodes: vec![], + child_block_ids: vec![], + }], + }; + + let tiptap = EditorBlockDocumentTiptapBridge::to_tiptap_doc(&document) + .expect("divider should convert to horizontalRule"); + + assert_eq!( + tiptap, + TiptapNode::Doc { + content: vec![TiptapNode::HorizontalRule { + attrs: TiptapHorizontalRuleAttrs { + block_id: Some("divider_1".into()), + }, + }], + } + ); + } + + #[test] + fn converts_nested_bullet_list_to_child_blocks() { + let doc = TiptapNode::Doc { + content: vec![TiptapNode::BulletList { + attrs: TiptapListAttrs { + block_id: Some("list_root".into()), + }, + content: vec![TiptapNode::ListItem { + attrs: TiptapListItemAttrs { + block_id: Some("parent".into()), + }, + content: vec![ + TiptapNode::Paragraph { + attrs: TiptapParagraphAttrs::default(), + content: vec![TiptapNode::Text { + text: "E19 parent".into(), + marks: vec![], + }], + }, + TiptapNode::BulletList { + attrs: TiptapListAttrs::default(), + content: vec![TiptapNode::ListItem { + attrs: TiptapListItemAttrs { + block_id: Some("child".into()), + }, + content: vec![TiptapNode::Paragraph { + attrs: TiptapParagraphAttrs::default(), + content: vec![TiptapNode::Text { + text: "E19 child".into(), + marks: vec![], + }], + }], + }], + }, + ], + }], + }], + }; + + let parsed = EditorBlockDocumentTiptapBridge::from_tiptap_doc("doc_1", &doc) + .expect("nested list should convert to child blocks"); + + assert_eq!(parsed.root_block_ids, vec!["parent"]); + assert_eq!(parsed.blocks.len(), 2); + assert_eq!(parsed.blocks[0].block_id, "parent"); + assert_eq!(parsed.blocks[0].block_type, EditorBlockType::BulletListItem); + assert_eq!(parsed.blocks[0].child_block_ids, vec!["child"]); + assert_eq!(parsed.blocks[1].block_id, "child"); + assert_eq!(parsed.blocks[1].block_type, EditorBlockType::BulletListItem); + } + + #[test] + fn converts_child_blocks_to_nested_bullet_list() { + let document = EditorBlockDocument { + document_id: "doc_1".into(), + root_block_ids: vec!["parent".into()], + blocks: vec![ + EditorBlock { + block_id: "parent".into(), + block_type: EditorBlockType::BulletListItem, + props: BlockProps::default(), + content_nodes: vec![ContentNode { + payload: ContentNodePayload::Text { + text: "E19 parent".into(), + marks: vec![], + }, + attrs: BTreeMap::new(), + }], + child_block_ids: vec!["child".into()], + }, + EditorBlock { + block_id: "child".into(), + block_type: EditorBlockType::BulletListItem, + props: BlockProps::default(), + content_nodes: vec![ContentNode { + payload: ContentNodePayload::Text { + text: "E19 child".into(), + marks: vec![], + }, + attrs: BTreeMap::new(), + }], + child_block_ids: vec![], + }, + ], + }; + + let tiptap = EditorBlockDocumentTiptapBridge::to_tiptap_doc(&document) + .expect("child blocks should convert to nested list"); + + let TiptapNode::Doc { content } = tiptap else { + panic!("expected doc"); + }; + let Some(TiptapNode::BulletList { content, .. }) = content.first() else { + panic!("expected root bullet list"); + }; + let Some(TiptapNode::ListItem { content, .. }) = content.first() else { + panic!("expected root list item"); + }; + assert!(content + .iter() + .any(|node| matches!(node, TiptapNode::BulletList { .. }))); + } + + #[test] + fn preserves_toc_node_snapshot() { + let doc = TiptapNode::Doc { + content: vec![TiptapNode::TocNode { + attrs: TiptapTocNodeAttrs { + top_offset: Some(0), + max_show_count: Some(20), + show_title: Some(true), + block_id: Some("toc_1".into()), + extra: BTreeMap::new(), + }, + }], + }; + + let parsed = EditorBlockDocumentTiptapBridge::from_tiptap_doc("doc_1", &doc) + .expect("tocNode should convert to toc block"); + assert_eq!(parsed.root_block_ids, vec!["toc_1"]); + assert_eq!(parsed.blocks[0].block_type, EditorBlockType::Toc); + assert_eq!( + parsed.blocks[0] + .props + .extra + .get("tiptapTocNode") + .and_then(|value| value.get("type")) + .and_then(Value::as_str), + Some("tocNode") + ); + + let restored = EditorBlockDocumentTiptapBridge::to_tiptap_doc(&parsed) + .expect("toc block should restore to tocNode"); + assert_eq!(restored, doc); + } + + #[test] + fn preserves_paragraph_text_alignment() { + let doc = TiptapNode::Doc { + content: vec![TiptapNode::Paragraph { + attrs: TiptapParagraphAttrs { + block_id: Some("align_1".into()), + text_align: Some("center".into()), + }, + content: vec![TiptapNode::Text { + text: "E20 center".into(), + marks: vec![], + }], + }], + }; + + let parsed = EditorBlockDocumentTiptapBridge::from_tiptap_doc("doc_1", &doc) + .expect("textAlign should convert to block props"); + assert_eq!( + parsed.blocks[0].props.extra.get("textAlign"), + Some(&serde_json::json!("center")) + ); + + let restored = EditorBlockDocumentTiptapBridge::to_tiptap_doc(&parsed) + .expect("textAlign should restore to tiptap attrs"); + let TiptapNode::Doc { content } = restored else { + panic!("expected doc"); + }; + let Some(TiptapNode::Paragraph { attrs, .. }) = content.first() else { + panic!("expected paragraph"); + }; + assert_eq!(attrs.text_align.as_deref(), Some("center")); + } +} diff --git a/rust/crates/core-protocol/tests/editor_tiptap_bridge.rs b/rust/crates/core-protocol/tests/editor_tiptap_bridge.rs index 1e2addbe..ec3c3ad2 100644 --- a/rust/crates/core-protocol/tests/editor_tiptap_bridge.rs +++ b/rust/crates/core-protocol/tests/editor_tiptap_bridge.rs @@ -149,6 +149,7 @@ fn tiptap_import_preserves_explicit_block_ids_and_marks() { TiptapNode::Paragraph { attrs: TiptapParagraphAttrs { block_id: Some("p-1".into()), + text_align: None, }, content: vec![TiptapNode::Text { text: "Hello".into(), @@ -161,6 +162,8 @@ fn tiptap_import_preserves_explicit_block_ids_and_marks() { attrs: TiptapHeadingAttrs { level: 3, block_id: Some("h-1".into()), + text_align: None, + collapsed: None, }, content: vec![TiptapNode::Text { text: "H".into(), @@ -179,6 +182,7 @@ fn tiptap_import_preserves_explicit_block_ids_and_marks() { content: vec![TiptapNode::Paragraph { attrs: TiptapParagraphAttrs { block_id: Some("t-1".into()), + text_align: None, }, content: vec![TiptapNode::Text { text: "todo".into(), @@ -191,6 +195,7 @@ fn tiptap_import_preserves_explicit_block_ids_and_marks() { attrs: TiptapCodeBlockAttrs { language: Some("ts".into()), block_id: Some("c-1".into()), + text_align: None, }, content: vec![TiptapNode::Text { text: "let x = 1;".into(), @@ -214,3 +219,119 @@ fn tiptap_import_preserves_explicit_block_ids_and_marks() { other => panic!("unexpected payload: {other:?}"), } } + +#[test] +fn tiptap_heading_round_trip_preserves_collapsed_attr() { + let doc: TiptapNode = serde_json::from_value(serde_json::json!({ + "type": "doc", + "content": [{ + "type": "heading", + "attrs": { + "level": 1, + "blockId": "folded-h1", + "collapsed": true + }, + "content": [{ "type": "text", "text": "折叠主标题" }] + }] + })) + .expect("heading JSON should parse"); + + let imported = EditorBlockDocumentTiptapBridge::from_tiptap_doc("doc_folded", &doc) + .expect("heading should import"); + assert_eq!(imported.blocks[0].props.heading_level, Some(1)); + assert_eq!(imported.blocks[0].props.collapsed, Some(true)); + + let exported = + EditorBlockDocumentTiptapBridge::to_tiptap_doc(&imported).expect("heading should export"); + let exported_value = serde_json::to_value(exported).expect("exported doc should serialize"); + assert_eq!( + exported_value.pointer("/content/0/attrs/collapsed"), + Some(&serde_json::json!(true)) + ); +} + +#[test] +fn tiptap_image_round_trip_preserves_image_node() { + let doc: TiptapNode = serde_json::from_value(serde_json::json!({ + "type": "doc", + "content": [{ + "type": "image", + "attrs": { + "src": "/api/editor/image-placeholder.svg", + "alt": "E24 图片占位", + "title": "E24 图片" + } + }] + })) + .expect("image JSON should parse"); + + let imported = EditorBlockDocumentTiptapBridge::from_tiptap_doc("doc_image", &doc) + .expect("image should import"); + assert_eq!(imported.blocks[0].block_type, EditorBlockType::Image); + + let exported = + EditorBlockDocumentTiptapBridge::to_tiptap_doc(&imported).expect("image should export"); + let exported_value = serde_json::to_value(exported).expect("exported doc should serialize"); + assert_eq!( + exported_value.pointer("/content/0/type"), + Some(&serde_json::json!("image")) + ); + assert_eq!( + exported_value.pointer("/content/0/attrs/src"), + Some(&serde_json::json!("/api/editor/image-placeholder.svg")) + ); +} + +#[test] +fn tiptap_table_round_trip_preserves_table_node() { + let doc: TiptapNode = serde_json::from_value(serde_json::json!({ + "type": "doc", + "content": [{ + "type": "table", + "attrs": { "blockId": "table-1" }, + "content": [{ + "type": "tableRow", + "content": [{ + "type": "tableCell", + "attrs": { "colspan": 1, "rowspan": 1, "colwidth": null }, + "content": [{ + "type": "paragraph", + "content": [{ "type": "text", "text": "A1" }] + }] + }, { + "type": "tableCell", + "attrs": { "colspan": 1, "rowspan": 1, "colwidth": null }, + "content": [{ "type": "paragraph" }] + }] + }, { + "type": "tableRow", + "content": [{ + "type": "tableCell", + "attrs": { "colspan": 1, "rowspan": 1, "colwidth": null }, + "content": [{ "type": "paragraph" }] + }, { + "type": "tableCell", + "attrs": { "colspan": 1, "rowspan": 1, "colwidth": null }, + "content": [{ "type": "paragraph" }] + }] + }] + }] + })) + .expect("table JSON should parse"); + + let imported = EditorBlockDocumentTiptapBridge::from_tiptap_doc("doc_table", &doc) + .expect("table should import"); + assert_eq!(imported.blocks[0].block_type, EditorBlockType::Table); + + let exported = + EditorBlockDocumentTiptapBridge::to_tiptap_doc(&imported).expect("table should export"); + let exported_value = serde_json::to_value(exported).expect("exported doc should serialize"); + assert_eq!( + exported_value.pointer("/content/0/type"), + Some(&serde_json::json!("table")) + ); + assert_eq!( + exported_value.pointer("/content/0/content/0/content/0/content/0/content/0/text"), + Some(&serde_json::json!("A1")) + ); +} diff --git a/rust/crates/mnote-web/src/routes/mod.rs b/rust/crates/mnote-web/src/routes/mod.rs index f51115f1..092abec0 100644 --- a/rust/crates/mnote-web/src/routes/mod.rs +++ b/rust/crates/mnote-web/src/routes/mod.rs @@ -52,6 +52,10 @@ pub fn build_router(state: AppState) -> Router { "/api/leptos-tiptap-runtime/{*asset_path}", get(web_shell::leptos_tiptap_asset), ) + .route( + "/api/editor/image-placeholder.svg", + get(web_shell::editor_image_placeholder_asset), + ) .route("/api/search/documents", post(search::documents)) .route("/api/gateway/health", get(gateway::gateway_health)) .route("/api/runtime/config", get(session::runtime_config)) diff --git a/rust/crates/mnote-web/src/routes/web_shell.rs b/rust/crates/mnote-web/src/routes/web_shell.rs index 79af0058..097b86c1 100644 --- a/rust/crates/mnote-web/src/routes/web_shell.rs +++ b/rust/crates/mnote-web/src/routes/web_shell.rs @@ -311,26 +311,93 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { const type = typeof block?.type === 'string' ? block.type : 'paragraph'; const text = flattenText(block?.content); const content = text ? [{ type: 'text', text }] : []; + const textAlign = typeof block?.props?.textAlign === 'string' + ? block.props.textAlign + : typeof block?.props?.text_align === 'string' + ? block.props.text_align + : undefined; + const withTextAlign = (attrs = {}) => textAlign ? { ...attrs, textAlign } : attrs; + const nestedChildren = Array.isArray(block?.children) + ? block.children.map(legacyBlockToTiptap).filter(Boolean) + : []; + const withListChildren = (itemType, listType, attrs = {}) => ({ + type: listType, + content: [{ + type: itemType, + attrs, + content: [ + { type: 'paragraph', content }, + ...nestedChildren, + ], + }], + }); if (type === 'heading') { const level = Number(block?.props?.level || block?.level || 1) || 1; - return { type: 'heading', attrs: { level: Math.max(1, Math.min(6, level)) }, content }; + const collapsed = typeof block?.props?.collapsed === 'boolean' ? { collapsed: block.props.collapsed } : {}; + return { type: 'heading', attrs: withTextAlign({ level: Math.max(1, Math.min(6, level)), ...collapsed }), content }; } if (type === 'bulletListItem' || type === 'bullet_list_item') { - return { type: 'bulletList', content: [{ type: 'listItem', content: [{ type: 'paragraph', content }] }] }; + return withListChildren('listItem', 'bulletList'); } if (type === 'numberedListItem' || type === 'numbered_list_item') { - return { type: 'orderedList', content: [{ type: 'listItem', content: [{ type: 'paragraph', content }] }] }; + return withListChildren('listItem', 'orderedList'); } if (type === 'checkListItem' || type === 'advancedTodo' || type === 'todo') { - return { type: 'taskList', content: [{ type: 'taskItem', attrs: { checked: Boolean(block?.props?.checked) }, content: [{ type: 'paragraph', content }] }] }; + return withListChildren('taskItem', 'taskList', { checked: Boolean(block?.props?.checked) }); } if (type === 'quote' || type === 'blockquote') { - return { type: 'blockquote', content: [{ type: 'paragraph', content }] }; + return { type: 'blockquote', attrs: withTextAlign(), content: [{ type: 'paragraph', attrs: withTextAlign(), content }] }; } - if (type === 'codeBlock') { - return { type: 'codeBlock', attrs: { language: block?.props?.language || null }, content }; + if (type === 'codeBlock' || type === 'code_block') { + return { type: 'codeBlock', attrs: withTextAlign({ language: block?.props?.language || null }), content }; } - return { type: 'paragraph', content }; + if (type === 'divider' || type === 'horizontalRule' || type === 'horizontal_rule') { + return { type: 'horizontalRule' }; + } + if (type === 'table') { + const tableSnapshot = block?.props?.tiptapTable; + if (tableSnapshot && typeof tableSnapshot === 'object' && tableSnapshot.type === 'table') { + return tableSnapshot; + } + return { + type: 'table', + content: [{ + type: 'tableRow', + content: [{ + type: 'tableCell', + attrs: { colspan: 1, rowspan: 1, colwidth: null }, + content: [{ type: 'paragraph', content }], + }], + }], + }; + } + if (type === 'toc' || type === 'tocNode' || type === 'toc_node') { + const tocSnapshot = block?.props?.tiptapTocNode || block?.props?.tiptapToc; + if (tocSnapshot && typeof tocSnapshot === 'object' && tocSnapshot.type === 'tocNode') { + return tocSnapshot; + } + return { + type: 'tocNode', + attrs: { + topOffset: Number(block?.props?.topOffset || block?.props?.top_offset || 0) || 0, + maxShowCount: Number(block?.props?.maxShowCount || block?.props?.max_show_count || 20) || 20, + showTitle: block?.props?.showTitle !== false, + }, + }; + } + if (type === 'image') { + const imageSnapshot = block?.props?.tiptapImage; + if (imageSnapshot && typeof imageSnapshot === 'object' && imageSnapshot.type === 'image') { + return imageSnapshot; + } + const attrs = { + src: String(block?.props?.src || block?.src || ''), + alt: block?.props?.alt || block?.alt || null, + title: block?.props?.title || block?.title || null, + }; + return attrs.src ? { type: 'image', attrs } : null; + } + return { type: 'paragraph', attrs: withTextAlign(), content }; }; const textToTiptapDocument = (text) => ({ @@ -371,9 +438,20 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { const pageBody = aggregate.body || {}; const permissions = aggregate.head?.permissions || {}; + const conflictDetectionKey = typeof pageBody.conflictDetectionKey === 'string' + ? pageBody.conflictDetectionKey + : typeof pageBody.conflict_detection_key === 'string' + ? pageBody.conflict_detection_key + : null; + const revisionFromConflictKey = (value) => { + const match = String(value || '').match(/:(\d+)$/); + return match ? Number(match[1]) : null; + }; + const pageBodyRevision = Number.isInteger(pageBody.revision) ? pageBody.revision : null; + const keyRevision = revisionFromConflictKey(conflictDetectionKey); const editorMeta = { - revision: Number.isInteger(pageBody.revision) ? pageBody.revision : null, - conflictDetectionKey: typeof pageBody.conflictDetectionKey === 'string' ? pageBody.conflictDetectionKey : null, + revision: pageBodyRevision && pageBodyRevision > 0 ? pageBodyRevision : keyRevision, + conflictDetectionKey, }; const mountOptions = { documentId: bootstrap.documentId, @@ -389,8 +467,26 @@ pub(crate) fn render_editor_island_adapter_script() -> &'static str { let saveTimer = 0; let lastSavedSerialized = ''; + const normalizeBridgeValue = (value) => { + if (value instanceof Map) { + const out = {}; + for (const [key, item] of value.entries()) { + out[key] = normalizeBridgeValue(item); + } + return out; + } + if (Array.isArray(value)) { + return value.map(normalizeBridgeValue); + } + if (value && typeof value === 'object') { + return Object.fromEntries( + Object.entries(value).map(([key, item]) => [key, normalizeBridgeValue(item)]), + ); + } + return value; + }; const normalizeEnvelopePayload = (event) => { - const detail = event?.detail; + const detail = normalizeBridgeValue(event?.detail); if (!detail || typeof detail !== 'object') return null; const payload = detail.payload && typeof detail.payload === 'object' ? detail.payload : detail; return payload && typeof payload === 'object' ? payload : null; @@ -512,6 +608,24 @@ fn runtime_asset_content_type(asset_path: &str) -> &'static str { } } +pub async fn editor_image_placeholder_asset() -> Response { + const SVG: &str = r##" + + + + + + E24 Image +"##; + Response::builder() + .status(StatusCode::OK) + .header(header::CONTENT_TYPE, "image/svg+xml; charset=utf-8") + .header(header::CACHE_CONTROL, "no-store") + .header(HEADER_MNOTE_WEB_OWNER, "mnote-web") + .body(Body::from(SVG)) + .unwrap_or_else(|_| Response::new(Body::empty())) +} + pub async fn leptos_tiptap_manifest() -> Response { let manifest = json!({ "entryAssetPath": "mnote-leptos-tiptap-spike-island.js", diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.d.ts b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.d.ts index acfbd109..7fb286c4 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.d.ts +++ b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.d.ts @@ -61,7 +61,7 @@ export interface InitOutput { readonly intounderlyingsource_cancel: (a: number) => void; readonly wasm_bindgen__convert__closures_____invoke__h36e788bd1cd1f0f7: (a: number, b: number, c: any) => [number, number]; readonly wasm_bindgen__convert__closures_____invoke__hb0ba6117a7ec12e8: (a: number, b: number, c: any, d: any) => void; - readonly wasm_bindgen__convert__closures_____invoke__h1ea2b89742286ce6: (a: number, b: number, c: any) => void; + readonly wasm_bindgen__convert__closures_____invoke__hdfdf165eabd6279b: (a: number, b: number, c: any) => void; readonly wasm_bindgen__convert__closures_____invoke__h2593b18d2d6f8a75: (a: number, b: number, c: any) => void; readonly wasm_bindgen__convert__closures_____invoke__h03deb55668e1377f: (a: number, b: number, c: any) => void; readonly wasm_bindgen__convert__closures_____invoke__h837fba73fce77300: (a: number, b: number, c: any) => void; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.js b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.js index 4af64cbc..ed7ef6cf 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.js @@ -21,15 +21,22 @@ import { register_ordered_list } from './snippets/leptos-tiptap-c355e6ec24c3df4c import { register_paragraph } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_paragraph.js'; import { register_placeholder } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_placeholder.js'; import { register_strike } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_strike.js'; +import { register_table } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table.js'; +import { register_table_cell } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_cell.js'; +import { register_table_header } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_header.js'; +import { register_table_row } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_row.js'; import { register_task_item } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_item.js'; import { register_task_list } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_list.js'; import { register_text } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text.js'; import { register_text_align } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_align.js'; import { register_text_style } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_style.js'; +import { register_toc_node } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_toc_node.js'; import { register_underline } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_underline.js'; import { register_youtube } from './snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_youtube.js'; -import * as import1 from "./snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js" -import * as import2 from "./snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js" +import * as import1 from "./snippets/mnote-leptos-tiptap-spike-fdb5779a1690afd2/inline0.js" +import * as import2 from "./snippets/mnote-leptos-tiptap-spike-fdb5779a1690afd2/inline0.js" +import * as import3 from "./snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js" +import * as import4 from "./snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js" export class IntoUnderlyingByteSource { @@ -491,6 +498,10 @@ function __wbg_get_imports() { const ret = arg0.getBoundingClientRect(); return ret; }, + __wbg_getElementsByTagName_0307fb99c94d7de4: function(arg0, arg1, arg2) { + const ret = arg0.getElementsByTagName(getStringFromWasm0(arg1, arg2)); + return ret; + }, __wbg_getItem_7fe1351b9ea3b2f3: function() { return handleError(function (arg0, arg1, arg2, arg3) { const ret = arg1.getItem(getStringFromWasm0(arg2, arg3)); var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); @@ -798,6 +809,10 @@ function __wbg_get_imports() { __wbg_prototypesetcall_a6b02eb00b0f4ce2: function(arg0, arg1, arg2) { Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2); }, + __wbg_querySelector_12b6c7cdf26a3483: function() { return handleError(function (arg0, arg1, arg2) { + const ret = arg0.querySelector(getStringFromWasm0(arg1, arg2)); + return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); + }, arguments); }, __wbg_querySelector_8d395ebd237ebd46: function() { return handleError(function (arg0, arg1, arg2) { const ret = arg0.querySelector(getStringFromWasm0(arg1, arg2)); return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); @@ -872,6 +887,18 @@ function __wbg_get_imports() { __wbg_register_strike_cd23a4801fbee3aa: function() { return handleError(function () { register_strike(); }, arguments); }, + __wbg_register_table_590493ea4d3d2ed0: function() { return handleError(function () { + register_table(); + }, arguments); }, + __wbg_register_table_cell_5c14e6780bc3c5d8: function() { return handleError(function () { + register_table_cell(); + }, arguments); }, + __wbg_register_table_header_7194a6f98b99eb87: function() { return handleError(function () { + register_table_header(); + }, arguments); }, + __wbg_register_table_row_d051d596b6164ab0: function() { return handleError(function () { + register_table_row(); + }, arguments); }, __wbg_register_task_item_f3bd8792f78774ac: function() { return handleError(function () { register_task_item(); }, arguments); }, @@ -887,6 +914,9 @@ function __wbg_get_imports() { __wbg_register_text_style_61ece26a92563bc1: function() { return handleError(function () { register_text_style(); }, arguments); }, + __wbg_register_toc_node_f7f31f30d7a88bdc: function() { return handleError(function () { + register_toc_node(); + }, arguments); }, __wbg_register_underline_f8cd359f982028f4: function() { return handleError(function () { register_underline(); }, arguments); }, @@ -1013,6 +1043,10 @@ function __wbg_get_imports() { __wbg_set_scrollTop_e931da7f2ad87c86: function(arg0, arg1) { arg0.scrollTop = arg1; }, + __wbg_shiftKey_e483c13c966878f6: function(arg0) { + const ret = arg0.shiftKey; + return ret; + }, __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) { const ret = arg1.stack; const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); @@ -1100,37 +1134,37 @@ function __wbg_get_imports() { return ret; }, __wbindgen_cast_0000000000000001: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 1120, ret: Unit, inner_ret: Some(Unit) }, mutable: false }) -> Externref`. - const ret = makeClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h1ea2b89742286ce6); + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 1456, ret: Unit, inner_ret: Some(Unit) }, mutable: false }) -> Externref`. + const ret = makeClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__hdfdf165eabd6279b); return ret; }, __wbindgen_cast_0000000000000002: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 1382, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 1686, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h2593b18d2d6f8a75); return ret; }, __wbindgen_cast_0000000000000003: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 1473, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 1777, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h36e788bd1cd1f0f7); return ret; }, __wbindgen_cast_0000000000000004: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("Event")], shim_idx: 1307, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("Event")], shim_idx: 1611, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h03deb55668e1377f); return ret; }, __wbindgen_cast_0000000000000005: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("Event")], shim_idx: 1384, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("Event")], shim_idx: 1688, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h837fba73fce77300); return ret; }, __wbindgen_cast_0000000000000006: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [], shim_idx: 1320, ret: Unit, inner_ret: Some(Unit) }, mutable: false }) -> Externref`. + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [], shim_idx: 1624, ret: Unit, inner_ret: Some(Unit) }, mutable: false }) -> Externref`. const ret = makeClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__hd17f30facfdd737f); return ret; }, __wbindgen_cast_0000000000000007: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [], shim_idx: 1383, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [], shim_idx: 1687, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__hf726e22cfd1ee0a9); return ret; }, @@ -1167,8 +1201,10 @@ function __wbg_get_imports() { return { __proto__: null, "./mnote-leptos-tiptap-spike-island_bg.js": import0, - "./snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js": import1, - "./snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js": import2, + "./snippets/mnote-leptos-tiptap-spike-fdb5779a1690afd2/inline0.js": import1, + "./snippets/mnote-leptos-tiptap-spike-fdb5779a1690afd2/inline0.js": import2, + "./snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js": import3, + "./snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js": import4, }; } @@ -1185,8 +1221,8 @@ function wasm_bindgen__convert__closures_____invoke__h60e57afd955e8441(arg0, arg return ret !== 0; } -function wasm_bindgen__convert__closures_____invoke__h1ea2b89742286ce6(arg0, arg1, arg2) { - wasm.wasm_bindgen__convert__closures_____invoke__h1ea2b89742286ce6(arg0, arg1, arg2); +function wasm_bindgen__convert__closures_____invoke__hdfdf165eabd6279b(arg0, arg1, arg2) { + wasm.wasm_bindgen__convert__closures_____invoke__hdfdf165eabd6279b(arg0, arg1, arg2); } function wasm_bindgen__convert__closures_____invoke__h2593b18d2d6f8a75(arg0, arg1, arg2) { diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm index f5c365f2..196884f8 100644 Binary files a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm and b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm differ diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm.d.ts b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm.d.ts index b65aa7b9..81ef8161 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm.d.ts +++ b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm.d.ts @@ -18,7 +18,7 @@ export const intounderlyingsource_pull: (a: number, b: any) => any; export const intounderlyingsource_cancel: (a: number) => void; export const wasm_bindgen__convert__closures_____invoke__h36e788bd1cd1f0f7: (a: number, b: number, c: any) => [number, number]; export const wasm_bindgen__convert__closures_____invoke__hb0ba6117a7ec12e8: (a: number, b: number, c: any, d: any) => void; -export const wasm_bindgen__convert__closures_____invoke__h1ea2b89742286ce6: (a: number, b: number, c: any) => void; +export const wasm_bindgen__convert__closures_____invoke__hdfdf165eabd6279b: (a: number, b: number, c: any) => void; export const wasm_bindgen__convert__closures_____invoke__h2593b18d2d6f8a75: (a: number, b: number, c: any) => void; export const wasm_bindgen__convert__closures_____invoke__h03deb55668e1377f: (a: number, b: number, c: any) => void; export const wasm_bindgen__convert__closures_____invoke__h837fba73fce77300: (a: number, b: number, c: any) => void; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js index 0726559d..d54df86a 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/bridge_runtime.js @@ -1,18 +1,18 @@ -var La=Object.defineProperty;var ae=(n,e)=>{for(var t in e)La(n,t,{get:e[t],enumerable:!0})};var bo="__LEPTOS_TIPTAP_BRIDGE__";function xo(){return{}}function So(){let n=globalThis,e=n[bo];if(e!=null)return e;let t={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return n[bo]=t,t}var ro={};ae(ro,{CommandManager:()=>ot,Editor:()=>Wi,Extension:()=>ue,InputRule:()=>$e,Mark:()=>Yn,Node:()=>Ki,NodePos:()=>er,NodeView:()=>Ji,PasteRule:()=>Ot,Tracker:()=>Hi,callOrReturn:()=>N,canInsertNode:()=>dp,combineTransactionSteps:()=>Cf,createChainableState:()=>nn,createDocument:()=>Zn,createNodeFromContent:()=>Nt,createStyleTag:()=>ka,defaultBlockAt:()=>na,deleteProps:()=>$i,elementFromString:()=>Et,escapeForRegEx:()=>up,extensions:()=>np,findChildren:()=>wf,findChildrenInRange:()=>Mf,findDuplicates:()=>Yl,findParentNode:()=>an,findParentNodeClosestToPos:()=>ra,fromString:()=>Jl,generateHTML:()=>Ef,generateJSON:()=>Of,generateText:()=>Tf,getAttributes:()=>oa,getAttributesFromExtensions:()=>qi,getChangedRanges:()=>Df,getDebugJSON:()=>la,getExtensionField:()=>x,getHTMLFromFragment:()=>on,getMarkAttributes:()=>eo,getMarkRange:()=>rr,getMarkType:()=>De,getMarksBetween:()=>no,getNodeAtPosition:()=>Af,getNodeAttributes:()=>ia,getNodeType:()=>F,getRenderedAttributes:()=>Gn,getSchema:()=>ir,getSchemaByResolvedExtensions:()=>Gi,getSchemaTypeByName:()=>Un,getSchemaTypeNameByName:()=>ln,getSplittedAttributes:()=>en,getText:()=>to,getTextBetween:()=>Yi,getTextContentFromNodes:()=>Hl,getTextSerializersFromSchema:()=>nr,injectExtensionAttributesToParseRule:()=>Fi,inputRulesPlugin:()=>ql,isActive:()=>aa,isAtEndOfNode:()=>vf,isAtStartOfNode:()=>Rf,isEmptyObject:()=>Kl,isExtensionRulesEnabled:()=>Li,isFunction:()=>Ui,isList:()=>ji,isMacOS:()=>Qi,isMarkActive:()=>Qn,isNodeActive:()=>Dt,isNodeEmpty:()=>or,isNodeSelection:()=>If,isNumber:()=>Ul,isPlainObject:()=>Qt,isRegExp:()=>tr,isSafari:()=>Ql,isString:()=>fp,isTextSelection:()=>Xi,isiOS:()=>Tt,markInputRule:()=>ip,markPasteRule:()=>cp,mergeAttributes:()=>Wl,mergeDeep:()=>sn,minMax:()=>be,nodeInputRule:()=>op,nodePasteRule:()=>pp,objectIncludes:()=>tn,pasteRulesPlugin:()=>Gl,posToDOMRect:()=>Pf,removeDuplicates:()=>sa,resolveFocusPosition:()=>Zi,rewriteUnknownContent:()=>_f,selectionToInsertionEnd:()=>ta,splitExtensions:()=>rn,textInputRule:()=>lp,textPasteRule:()=>hp,textblockTypeInputRule:()=>sp,wrappingInputRule:()=>ap});var vr={};ae(vr,{AllSelection:()=>q,EditorState:()=>jt,NodeSelection:()=>S,Plugin:()=>P,PluginKey:()=>te,Selection:()=>E,SelectionRange:()=>Ye,TextSelection:()=>T,Transaction:()=>bn});function H(n){this.content=n}H.prototype={constructor:H,find:function(n){for(var e=0;e>1}};H.from=function(n){if(n instanceof H)return n;var e=[];if(n)for(var t in n)e.push(t,n[t]);return new H(e)};var fr=H;function vo(n,e,t){for(let r=0;;r++){if(r==n.childCount||r==e.childCount)return n.childCount==e.childCount?null:t;let i=n.child(r),o=e.child(r);if(i==o){t+=i.nodeSize;continue}if(!i.sameMarkup(o))return t;if(i.isText&&i.text!=o.text){for(let s=0;i.text[s]==o.text[s];s++)t++;return t}if(i.content.size||o.content.size){let s=vo(i.content,o.content,t+1);if(s!=null)return s}t+=i.nodeSize}}function Ro(n,e,t,r){for(let i=n.childCount,o=e.childCount;;){if(i==0||o==0)return i==o?null:{a:t,b:r};let s=n.child(--i),l=e.child(--o),a=s.nodeSize;if(s==l){t-=a,r-=a;continue}if(!s.sameMarkup(l))return{a:t,b:r};if(s.isText&&s.text!=l.text){let c=0,d=Math.min(s.text.length,l.text.length);for(;ce&&r(a,i+l,o||null,s)!==!1&&a.content.size){let d=l+1;a.nodesBetween(Math.max(0,e-d),Math.min(a.content.size,t-d),r,i+d)}l=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,r,i){let o="",s=!0;return this.nodesBetween(e,t,(l,a)=>{let c=l.isText?l.text.slice(Math.max(e,a)-a,t-a):l.isLeaf?i?typeof i=="function"?i(l):i:l.type.spec.leafText?l.type.spec.leafText(l):"":"";l.isBlock&&(l.isLeaf&&c||l.isTextblock)&&r&&(s?s=!1:o+=r),o+=c},0),o}append(e){if(!e.size)return this;if(!this.size)return e;let t=this.lastChild,r=e.firstChild,i=this.content.slice(),o=0;for(t.isText&&t.sameMarkup(r)&&(i[i.length-1]=t.withText(t.text+r.text),o=1);oe)for(let o=0,s=0;se&&((st)&&(l.isText?l=l.cut(Math.max(0,e-s),Math.min(l.text.length,t-s)):l=l.cut(Math.max(0,e-s-1),Math.min(l.content.size,t-s-1))),r.push(l),i+=l.nodeSize),s=a}return new n(r,i)}cutByIndex(e,t){return e==t?n.empty:e==0&&t==this.content.length?this:new n(this.content.slice(e,t))}replaceChild(e,t){let r=this.content[e];if(r==t)return this;let i=this.content.slice(),o=this.size+t.nodeSize-r.nodeSize;return i[e]=t,new n(i,o)}addToStart(e){return new n([e].concat(this.content),this.size+e.nodeSize)}addToEnd(e){return new n(this.content.concat(e),this.size+e.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let t=0;tthis.size||e<0)throw new RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,r=0;;t++){let i=this.child(t),o=r+i.nodeSize;if(o>=e)return o==e?un(t+1,o):un(t,r);r=o}}toString(){return"<"+this.toStringInner()+">"}toStringInner(){return this.content.join(", ")}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(e,t){if(!t)return n.empty;if(!Array.isArray(t))throw new RangeError("Invalid input for Fragment.fromJSON");return new n(t.map(e.nodeFromJSON))}static fromArray(e){if(!e.length)return n.empty;let t,r=0;for(let i=0;ithis.type.rank&&(t||(t=e.slice(0,i)),t.push(this),r=!0),t&&t.push(o)}}return t||(t=e.slice()),r||t.push(this),t}removeFromSet(e){for(let t=0;tr.type.rank-i.type.rank),t}};D.none=[];var ve=class extends Error{},b=class n{constructor(e,t,r){this.content=e,this.openStart=t,this.openEnd=r}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(e,t){let r=Po(this.content,e+this.openStart,t);return r&&new n(r,this.openStart,this.openEnd)}removeBetween(e,t){return new n(Io(this.content,e+this.openStart,t+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+"("+this.openStart+","+this.openEnd+")"}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(e,t){if(!t)return n.empty;let r=t.openStart||0,i=t.openEnd||0;if(typeof r!="number"||typeof i!="number")throw new RangeError("Invalid input for Slice.fromJSON");return new n(k.fromJSON(e,t.content),r,i)}static maxOpen(e,t=!0){let r=0,i=0;for(let o=e.firstChild;o&&!o.isLeaf&&(t||!o.type.spec.isolating);o=o.firstChild)r++;for(let o=e.lastChild;o&&!o.isLeaf&&(t||!o.type.spec.isolating);o=o.lastChild)i++;return new n(e,r,i)}};b.empty=new b(k.empty,0,0);function Io(n,e,t){let{index:r,offset:i}=n.findIndex(e),o=n.maybeChild(r),{index:s,offset:l}=n.findIndex(t);if(i==e||o.isText){if(l!=t&&!n.child(s).isText)throw new RangeError("Removing non-flat range");return n.cut(0,e).append(n.cut(t))}if(r!=s)throw new RangeError("Removing non-flat range");return n.replaceChild(r,o.copy(Io(o.content,e-i-1,t-i-1)))}function Po(n,e,t,r){let{index:i,offset:o}=n.findIndex(e),s=n.maybeChild(i);if(o==e||s.isText)return r&&!r.canReplace(i,i,t)?null:n.cut(0,e).append(t).append(n.cut(e));let l=Po(s.content,e-o-1,t,s);return l&&n.replaceChild(i,s.copy(l))}function Va(n,e,t){if(t.openStart>n.depth)throw new ve("Inserted content deeper than insertion position");if(n.depth-t.openStart!=e.depth-t.openEnd)throw new ve("Inconsistent open depths");return _o(n,e,t,0)}function _o(n,e,t,r){let i=n.index(r),o=n.node(r);if(i==e.index(r)&&r=0&&n.isText&&n.sameMarkup(e[t])?e[t]=n.withText(e[t].text+n.text):e.push(n)}function vt(n,e,t,r){let i=(e||n).node(t),o=0,s=e?e.index(t):i.childCount;n&&(o=n.index(t),n.depth>t?o++:n.textOffset&&(je(n.nodeAfter,r),o++));for(let l=o;li&&mr(n,e,i+1),s=r.depth>i&&mr(t,r,i+1),l=[];return vt(null,n,i,l),o&&s&&e.index(i)==t.index(i)?(Bo(o,s),je(We(o,zo(n,e,t,r,i+1)),l)):(o&&je(We(o,hn(n,e,i+1)),l),vt(e,t,i,l),s&&je(We(s,hn(t,r,i+1)),l)),vt(r,null,i,l),new k(l)}function hn(n,e,t){let r=[];if(vt(null,n,t,r),n.depth>t){let i=mr(n,e,t+1);je(We(i,hn(n,e,t+1)),r)}return vt(e,null,t,r),new k(r)}function $a(n,e){let t=e.depth-n.openStart,i=e.node(t).copy(n.content);for(let o=t-1;o>=0;o--)i=e.node(o).copy(k.from(i));return{start:i.resolveNoCache(n.openStart+t),end:i.resolveNoCache(i.content.size-n.openEnd-t)}}var It=class n{constructor(e,t,r){this.pos=e,this.path=t,this.parentOffset=r,this.depth=t.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position before the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position after the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;let r=this.pos-this.path[this.path.length-1],i=e.child(t);return r?e.child(t).cut(r):i}get nodeBefore(){let e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):e==0?null:this.parent.child(e-1)}posAtIndex(e,t){t=this.resolveDepth(t);let r=this.path[t*3],i=t==0?0:this.path[t*3-1]+1;for(let o=0;o0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0}blockRange(e=this,t){if(e.pos=0;r--)if(e.pos<=this.end(r)&&(!t||t(this.node(r))))return new Re(this,e,r);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos=0&&t<=e.content.size))throw new RangeError("Position "+t+" out of range");let r=[],i=0,o=t;for(let s=e;;){let{index:l,offset:a}=s.content.findIndex(o),c=o-a;if(r.push(s,l,i+a),!c||(s=s.child(l),s.isText))break;o=c-1,i+=a+1}return new n(t,r,o)}static resolveCached(e,t){let r=Co.get(e);if(r)for(let o=0;oe&&this.nodesBetween(e,t,o=>(r.isInSet(o.marks)&&(i=!0),!i)),i}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+="("+this.content.toStringInner()+")"),Fo(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw new Error("Called contentMatchAt on a node with invalid content");return t}canReplace(e,t,r=k.empty,i=0,o=r.childCount){let s=this.contentMatchAt(e).matchFragment(r,i,o),l=s&&s.matchFragment(this.content,t);if(!l||!l.validEnd)return!1;for(let a=i;at.type.name)}`);this.content.forEach(t=>t.check())}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(t=>t.toJSON())),e}static fromJSON(e,t){if(!t)throw new RangeError("Invalid input for Node.fromJSON");let r;if(t.marks){if(!Array.isArray(t.marks))throw new RangeError("Invalid mark data for Node.fromJSON");r=t.marks.map(e.markFromJSON)}if(t.type=="text"){if(typeof t.text!="string")throw new RangeError("Invalid text node in JSON");return e.text(t.text,r)}let i=k.fromJSON(e,t.content),o=e.nodeType(t.type).create(t.attrs,i,r);return o.type.checkAttrs(o.attrs),o}};Y.prototype.text=void 0;var yr=class n extends Y{constructor(e,t,r,i){if(super(e,t,null,i),!r)throw new RangeError("Empty text nodes are not allowed");this.text=r}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):Fo(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,t){return this.text.slice(e,t)}get nodeSize(){return this.text.length}mark(e){return e==this.marks?this:new n(this.type,this.attrs,this.text,e)}withText(e){return e==this.text?this:new n(this.type,this.attrs,e,this.marks)}cut(e=0,t=this.text.length){return e==0&&t==this.text.length?this:this.withText(this.text.slice(e,t))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function Fo(n,e){for(let t=n.length-1;t>=0;t--)e=n[t].type.name+"("+e+")";return e}var Ie=class n{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(e,t){let r=new kr(e,t);if(r.next==null)return n.empty;let i=Lo(r);r.next&&r.err("Unexpected trailing text");let o=Ya(Ga(i));return Xa(o,r),o}matchType(e){for(let t=0;tc.createAndFill()));for(let c=0;c=this.next.length)throw new RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(r){e.push(r);for(let i=0;i{let o=i+(r.validEnd?"*":" ")+" ";for(let s=0;s"+e.indexOf(r.next[s].next);return o}).join(` -`)}};Ie.empty=new Ie(!0);var kr=class{constructor(e,t){this.string=e,this.nodeTypes=t,this.inline=null,this.pos=0,this.tokens=e.split(/\s*(?=\b|\W|$)/),this.tokens[this.tokens.length-1]==""&&this.tokens.pop(),this.tokens[0]==""&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw new SyntaxError(e+" (in content expression '"+this.string+"')")}};function Lo(n){let e=[];do e.push(Ka(n));while(n.eat("|"));return e.length==1?e[0]:{type:"choice",exprs:e}}function Ka(n){let e=[];do e.push(Ja(n));while(n.next&&n.next!=")"&&n.next!="|");return e.length==1?e[0]:{type:"seq",exprs:e}}function Ja(n){let e=Ua(n);for(;;)if(n.eat("+"))e={type:"plus",expr:e};else if(n.eat("*"))e={type:"star",expr:e};else if(n.eat("?"))e={type:"opt",expr:e};else if(n.eat("{"))e=Ha(n,e);else break;return e}function wo(n){/\D/.test(n.next)&&n.err("Expected number, got '"+n.next+"'");let e=Number(n.next);return n.pos++,e}function Ha(n,e){let t=wo(n),r=t;return n.eat(",")&&(n.next!="}"?r=wo(n):r=-1),n.eat("}")||n.err("Unclosed braced range"),{type:"range",min:t,max:r,expr:e}}function qa(n,e){let t=n.nodeTypes,r=t[e];if(r)return[r];let i=[];for(let o in t){let s=t[o];s.isInGroup(e)&&i.push(s)}return i.length==0&&n.err("No node type or group '"+e+"' found"),i}function Ua(n){if(n.eat("(")){let e=Lo(n);return n.eat(")")||n.err("Missing closing paren"),e}else if(/\W/.test(n.next))n.err("Unexpected token '"+n.next+"'");else{let e=qa(n,n.next).map(t=>(n.inline==null?n.inline=t.isInline:n.inline!=t.isInline&&n.err("Mixing inline and block content"),{type:"name",value:t}));return n.pos++,e.length==1?e[0]:{type:"choice",exprs:e}}}function Ga(n){let e=[[]];return i(o(n,0),t()),e;function t(){return e.push([])-1}function r(s,l,a){let c={term:a,to:l};return e[s].push(c),c}function i(s,l){s.forEach(a=>a.to=l)}function o(s,l){if(s.type=="choice")return s.exprs.reduce((a,c)=>a.concat(o(c,l)),[]);if(s.type=="seq")for(let a=0;;a++){let c=o(s.exprs[a],l);if(a==s.exprs.length-1)return c;i(c,l=t())}else if(s.type=="star"){let a=t();return r(l,a),i(o(s.expr,a),a),[r(a)]}else if(s.type=="plus"){let a=t();return i(o(s.expr,l),a),i(o(s.expr,a),a),[r(a)]}else{if(s.type=="opt")return[r(l)].concat(o(s.expr,l));if(s.type=="range"){let a=l;for(let c=0;c{n[s].forEach(({term:l,to:a})=>{if(!l)return;let c;for(let d=0;d{c||i.push([l,c=[]]),c.indexOf(d)==-1&&c.push(d)})})});let o=e[r.join(",")]=new Ie(r.indexOf(n.length-1)>-1);for(let s=0;s-1}get whitespace(){return this.spec.whitespace||(this.spec.code?"pre":"normal")}hasRequiredAttrs(){for(let e in this.attrs)if(this.attrs[e].isRequired)return!0;return!1}compatibleContent(e){return this==e||this.contentMatch.compatible(e.contentMatch)}computeAttrs(e){return!e&&this.defaultAttrs?this.defaultAttrs:jo(this.attrs,e)}create(e=null,t,r){if(this.isText)throw new Error("NodeType.create can't construct text nodes");return new Y(this,this.computeAttrs(e),k.from(t),D.setFrom(r))}createChecked(e=null,t,r){return t=k.from(t),this.checkContent(t),new Y(this,this.computeAttrs(e),t,D.setFrom(r))}createAndFill(e=null,t,r){if(e=this.computeAttrs(e),t=k.from(t),t.size){let s=this.contentMatch.fillBefore(t);if(!s)return null;t=s.append(t)}let i=this.contentMatch.matchFragment(t),o=i&&i.fillBefore(k.empty,!0);return o?new Y(this,e,t.append(o),D.setFrom(r)):null}validContent(e){let t=this.contentMatch.matchFragment(e);if(!t||!t.validEnd)return!1;for(let r=0;r-1}allowsMarks(e){if(this.markSet==null)return!0;for(let t=0;tr[o]=new n(o,t,s));let i=t.spec.topNode||"doc";if(!r[i])throw new RangeError("Schema is missing its top node type ('"+i+"')");if(!r.text)throw new RangeError("Every schema needs a 'text' type");for(let o in r.text.attrs)throw new RangeError("The text node type should not have attributes");return r}};function Za(n,e,t){let r=t.split("|");return i=>{let o=i===null?"null":typeof i;if(r.indexOf(o)<0)throw new RangeError(`Expected value of type ${r} for attribute ${e} on type ${n}, got ${o}`)}}var br=class{constructor(e,t,r){this.hasDefault=Object.prototype.hasOwnProperty.call(r,"default"),this.default=r.default,this.validate=typeof r.validate=="string"?Za(e,t,r.validate):r.validate}get isRequired(){return!this.hasDefault}},at=class n{constructor(e,t,r,i){this.name=e,this.rank=t,this.schema=r,this.spec=i,this.attrs=Ko(e,i.attrs),this.excluded=null;let o=$o(this.attrs);this.instance=o?new D(this,o):null}create(e=null){return!e&&this.instance?this.instance:new D(this,jo(this.attrs,e))}static compile(e,t){let r=Object.create(null),i=0;return e.forEach((o,s)=>r[o]=new n(o,i++,t,s)),r}removeFromSet(e){for(var t=0;t-1}},ct=class{constructor(e){this.linebreakReplacement=null,this.cached=Object.create(null);let t=this.spec={};for(let i in e)t[i]=e[i];t.nodes=fr.from(e.nodes),t.marks=fr.from(e.marks||{}),this.nodes=Pt.compile(this.spec.nodes,this),this.marks=at.compile(this.spec.marks,this);let r=Object.create(null);for(let i in this.nodes){if(i in this.marks)throw new RangeError(i+" can not be both a node and a mark");let o=this.nodes[i],s=o.spec.content||"",l=o.spec.marks;if(o.contentMatch=r[s]||(r[s]=Ie.parse(s,this.nodes)),o.inlineContent=o.contentMatch.inlineContent,o.spec.linebreakReplacement){if(this.linebreakReplacement)throw new RangeError("Multiple linebreak nodes defined");if(!o.isInline||!o.isLeaf)throw new RangeError("Linebreak replacement nodes must be inline leaf nodes");this.linebreakReplacement=o}o.markSet=l=="_"?null:l?Eo(this,l.split(" ")):l==""||!o.inlineContent?[]:null}for(let i in this.marks){let o=this.marks[i],s=o.spec.excludes;o.excluded=s==null?[o]:s==""?[]:Eo(this,s.split(" "))}this.nodeFromJSON=i=>Y.fromJSON(this,i),this.markFromJSON=i=>D.fromJSON(this,i),this.topNodeType=this.nodes[this.spec.topNode||"doc"],this.cached.wrappings=Object.create(null)}node(e,t=null,r,i){if(typeof e=="string")e=this.nodeType(e);else if(e instanceof Pt){if(e.schema!=this)throw new RangeError("Node type from different schema used ("+e.name+")")}else throw new RangeError("Invalid node type: "+e);return e.createChecked(t,r,i)}text(e,t){let r=this.nodes.text;return new yr(r,r.defaultAttrs,e,D.setFrom(t))}mark(e,t){return typeof e=="string"&&(e=this.marks[e]),e.create(t)}nodeType(e){let t=this.nodes[e];if(!t)throw new RangeError("Unknown node type: "+e);return t}};function Eo(n,e){let t=[];for(let r=0;r-1)&&t.push(s=a)}if(!s)throw new SyntaxError("Unknown mark type: '"+e[r]+"'")}return t}function Qa(n){return n.tag!=null}function ec(n){return n.style!=null}var ce=class n{constructor(e,t){this.schema=e,this.rules=t,this.tags=[],this.styles=[];let r=this.matchedStyles=[];t.forEach(i=>{if(Qa(i))this.tags.push(i);else if(ec(i)){let o=/[^=]*/.exec(i.style)[0];r.indexOf(o)<0&&r.push(o),this.styles.push(i)}}),this.normalizeLists=!this.tags.some(i=>{if(!/^(ul|ol)\b/.test(i.tag)||!i.node)return!1;let o=e.nodes[i.node];return o.contentMatch.matchType(o)})}parse(e,t={}){let r=new mn(this,t,!1);return r.addAll(e,D.none,t.from,t.to),r.finish()}parseSlice(e,t={}){let r=new mn(this,t,!0);return r.addAll(e,D.none,t.from,t.to),b.maxOpen(r.finish())}matchTag(e,t,r){for(let i=r?this.tags.indexOf(r)+1:0;ie.length&&(l.charCodeAt(e.length)!=61||l.slice(e.length+1)!=t))){if(s.getAttrs){let a=s.getAttrs(t);if(a===!1)continue;s.attrs=a||void 0}return s}}}static schemaRules(e){let t=[];function r(i){let o=i.priority==null?50:i.priority,s=0;for(;s{r(s=To(s)),s.mark||s.ignore||s.clearMark||(s.mark=i)})}for(let i in e.nodes){let o=e.nodes[i].spec.parseDOM;o&&o.forEach(s=>{r(s=To(s)),s.node||s.ignore||s.mark||(s.node=i)})}return t}static fromSchema(e){return e.cached.domParser||(e.cached.domParser=new n(e,n.schemaRules(e)))}},Jo={address:!0,article:!0,aside:!0,blockquote:!0,canvas:!0,dd:!0,div:!0,dl:!0,fieldset:!0,figcaption:!0,figure:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,li:!0,noscript:!0,ol:!0,output:!0,p:!0,pre:!0,section:!0,table:!0,tfoot:!0,ul:!0},tc={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},Ho={ol:!0,ul:!0},_t=1,xr=2,Rt=4;function Oo(n,e,t){return e!=null?(e?_t:0)|(e==="full"?xr:0):n&&n.whitespace=="pre"?_t|xr:t&~Rt}var lt=class{constructor(e,t,r,i,o,s){this.type=e,this.attrs=t,this.marks=r,this.solid=i,this.options=s,this.content=[],this.activeMarks=D.none,this.match=o||(s&Rt?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let t=this.type.contentMatch.fillBefore(k.from(e));if(t)this.match=this.type.contentMatch.matchFragment(t);else{let r=this.type.contentMatch,i;return(i=r.findWrapping(e.type))?(this.match=r,i):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&_t)){let r=this.content[this.content.length-1],i;if(r&&r.isText&&(i=/[ \t\r\n\u000c]+$/.exec(r.text))){let o=r;r.text.length==i[0].length?this.content.pop():this.content[this.content.length-1]=o.withText(o.text.slice(0,o.text.length-i[0].length))}}let t=k.from(this.content);return!e&&this.match&&(t=t.append(this.match.fillBefore(k.empty,!0))),this.type?this.type.create(this.attrs,t,this.marks):t}inlineContext(e){return this.type?this.type.inlineContent:this.content.length?this.content[0].isInline:e.parentNode&&!Jo.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}},mn=class{constructor(e,t,r){this.parser=e,this.options=t,this.isOpen=r,this.open=0,this.localPreserveWS=!1;let i=t.topNode,o,s=Oo(null,t.preserveWhitespace,0)|(r?Rt:0);i?o=new lt(i.type,i.attrs,D.none,!0,t.topMatch||i.type.contentMatch,s):r?o=new lt(null,null,D.none,!0,null,s):o=new lt(e.schema.topNodeType,null,D.none,!0,null,s),this.nodes=[o],this.find=t.findPositions,this.needsBlock=!1}get top(){return this.nodes[this.open]}addDOM(e,t){e.nodeType==3?this.addTextNode(e,t):e.nodeType==1&&this.addElement(e,t)}addTextNode(e,t){let r=e.nodeValue,i=this.top,o=i.options&xr?"full":this.localPreserveWS||(i.options&_t)>0,{schema:s}=this.parser;if(o==="full"||i.inlineContext(e)||/[^ \t\r\n\u000c]/.test(r)){if(o)if(o==="full")r=r.replace(/\r\n?/g,` -`);else if(s.linebreakReplacement&&/[\r\n]/.test(r)&&this.top.findWrapping(s.linebreakReplacement.create())){let l=r.split(/\r?\n|\r/);for(let a=0;a!a.clearMark(c)):t=t.concat(this.parser.schema.marks[a.mark].create(a.attrs)),a.consuming===!1)l=a;else break}}return t}addElementByRule(e,t,r,i){let o,s;if(t.node)if(s=this.parser.schema.nodes[t.node],s.isLeaf)this.insertNode(s.create(t.attrs),r,e.nodeName=="BR")||this.leafFallback(e,r);else{let a=this.enter(s,t.attrs||null,r,t.preserveWhitespace);a&&(o=!0,r=a)}else{let a=this.parser.schema.marks[t.mark];r=r.concat(a.create(t.attrs))}let l=this.top;if(s&&s.isLeaf)this.findInside(e);else if(i)this.addElement(e,r,i);else if(t.getContent)this.findInside(e),t.getContent(e,this.parser.schema).forEach(a=>this.insertNode(a,r,!1));else{let a=e;typeof t.contentElement=="string"?a=e.querySelector(t.contentElement):typeof t.contentElement=="function"?a=t.contentElement(e):t.contentElement&&(a=t.contentElement),this.findAround(e,a,!0),this.addAll(a,r),this.findAround(e,a,!1)}o&&this.sync(l)&&this.open--}addAll(e,t,r,i){let o=r||0;for(let s=r?e.childNodes[r]:e.firstChild,l=i==null?null:e.childNodes[i];s!=l;s=s.nextSibling,++o)this.findAtPoint(e,o),this.addDOM(s,t);this.findAtPoint(e,o)}findPlace(e,t,r){let i,o;for(let s=this.open,l=0;s>=0;s--){let a=this.nodes[s],c=a.findWrapping(e);if(c&&(!i||i.length>c.length+l)&&(i=c,o=a,!c.length))break;if(a.solid){if(r)break;l+=2}}if(!i)return null;this.sync(o);for(let s=0;s(s.type?s.type.allowsMarkType(c.type):No(c.type,e))?(a=c.addToSet(a),!1):!0),this.nodes.push(new lt(e,t,a,i,null,l)),this.open++,r}closeExtra(e=!1){let t=this.nodes.length-1;if(t>this.open){for(;t>this.open;t--)this.nodes[t-1].content.push(this.nodes[t].finish(e));this.nodes.length=this.open+1}}finish(){return this.open=0,this.closeExtra(this.isOpen),this.nodes[0].finish(!!(this.isOpen||this.options.topOpen))}sync(e){for(let t=this.open;t>=0;t--){if(this.nodes[t]==e)return this.open=t,!0;this.localPreserveWS&&(this.nodes[t].options|=_t)}return!1}get currentPos(){this.closeExtra();let e=0;for(let t=this.open;t>=0;t--){let r=this.nodes[t].content;for(let i=r.length-1;i>=0;i--)e+=r[i].nodeSize;t&&e++}return e}findAtPoint(e,t){if(this.find)for(let r=0;r-1)return e.split(/\s*\|\s*/).some(this.matchesContext,this);let t=e.split("/"),r=this.options.context,i=!this.isOpen&&(!r||r.parent.type==this.nodes[0].type),o=-(r?r.depth+1:0)+(i?0:1),s=(l,a)=>{for(;l>=0;l--){let c=t[l];if(c==""){if(l==t.length-1||l==0)continue;for(;a>=o;a--)if(s(l-1,a))return!0;return!1}else{let d=a>0||a==0&&i?this.nodes[a].type:r&&a>=o?r.node(a-o).type:null;if(!d||d.name!=c&&!d.isInGroup(c))return!1;a--}}return!0};return s(t.length-1,this.open)}textblockFromContext(){let e=this.options.context;if(e)for(let t=e.depth;t>=0;t--){let r=e.node(t).contentMatchAt(e.indexAfter(t)).defaultType;if(r&&r.isTextblock&&r.defaultAttrs)return r}for(let t in this.parser.schema.nodes){let r=this.parser.schema.nodes[t];if(r.isTextblock&&r.defaultAttrs)return r}}};function nc(n){for(let e=n.firstChild,t=null;e;e=e.nextSibling){let r=e.nodeType==1?e.nodeName.toLowerCase():null;r&&Ho.hasOwnProperty(r)&&t?(t.appendChild(e),e=t):r=="li"?t=e:r&&(t=null)}}function rc(n,e){return(n.matches||n.msMatchesSelector||n.webkitMatchesSelector||n.mozMatchesSelector).call(n,e)}function To(n){let e={};for(let t in n)e[t]=n[t];return e}function No(n,e){let t=e.schema.nodes;for(let r in t){let i=t[r];if(!i.allowsMarkType(n))continue;let o=[],s=l=>{o.push(l);for(let a=0;a{if(o.length||s.marks.length){let l=0,a=0;for(;l=0;i--){let o=this.serializeMark(e.marks[i],e.isInline,t);o&&((o.contentDOM||o.dom).appendChild(r),r=o.dom)}return r}serializeMark(e,t,r={}){let i=this.marks[e.type.name];return i&&fn(hr(r),i(e,t),null,e.attrs)}static renderSpec(e,t,r=null,i){return fn(e,t,r,i)}static fromSchema(e){return e.cached.domSerializer||(e.cached.domSerializer=new n(this.nodesFromSchema(e),this.marksFromSchema(e)))}static nodesFromSchema(e){let t=Do(e.nodes);return t.text||(t.text=r=>r.text),t}static marksFromSchema(e){return Do(e.marks)}};function Do(n){let e={};for(let t in n){let r=n[t].spec.toDOM;r&&(e[t]=r)}return e}function hr(n){return n.document||window.document}var Ao=new WeakMap;function ic(n){let e=Ao.get(n);return e===void 0&&Ao.set(n,e=oc(n)),e}function oc(n){let e=null;function t(r){if(r&&typeof r=="object")if(Array.isArray(r))if(typeof r[0]=="string")e||(e=[]),e.push(r);else for(let i=0;i-1)throw new RangeError("Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.");let s=i.indexOf(" ");s>0&&(t=i.slice(0,s),i=i.slice(s+1));let l,a=t?n.createElementNS(t,i):n.createElement(i),c=e[1],d=1;if(c&&typeof c=="object"&&c.nodeType==null&&!Array.isArray(c)){d=2;for(let u in c)if(c[u]!=null){let f=u.indexOf(" ");f>0?a.setAttributeNS(u.slice(0,f),u.slice(f+1),c[u]):u=="style"&&a.style?a.style.cssText=c[u]:a.setAttribute(u,c[u])}}for(let u=d;ud)throw new RangeError("Content hole must be the only child of its parent node");return{dom:a,contentDOM:a}}else{let{dom:p,contentDOM:h}=fn(n,f,t,r);if(a.appendChild(p),h){if(l)throw new RangeError("Multiple content holes");l=h}}}return{dom:a,contentDOM:l}}var Go=65535,Yo=Math.pow(2,16);function sc(n,e){return n+e*Yo}function qo(n){return n&Go}function lc(n){return(n-(n&Go))/Yo}var Xo=1,Zo=2,gn=4,Qo=8,dt=class{constructor(e,t,r){this.pos=e,this.delInfo=t,this.recover=r}get deleted(){return(this.delInfo&Qo)>0}get deletedBefore(){return(this.delInfo&(Xo|gn))>0}get deletedAfter(){return(this.delInfo&(Zo|gn))>0}get deletedAcross(){return(this.delInfo&gn)>0}},he=class n{constructor(e,t=!1){if(this.ranges=e,this.inverted=t,!e.length&&n.empty)return n.empty}recover(e){let t=0,r=qo(e);if(!this.inverted)for(let i=0;ie)break;let c=this.ranges[l+o],d=this.ranges[l+s],u=a+c;if(e<=u){let f=c?e==a?-1:e==u?1:t:t,p=a+i+(f<0?0:d);if(r)return p;let h=e==(t<0?a:u)?null:sc(l/3,e-a),m=e==a?Zo:e==u?Xo:gn;return(t<0?e!=a:e!=u)&&(m|=Qo),new dt(p,m,h)}i+=d-c}return r?e+i:new dt(e+i,0,null)}touches(e,t){let r=0,i=qo(t),o=this.inverted?2:1,s=this.inverted?1:2;for(let l=0;le)break;let c=this.ranges[l+o],d=a+c;if(e<=d&&l==i*3)return!0;r+=this.ranges[l+s]-c}return!1}forEach(e){let t=this.inverted?2:1,r=this.inverted?1:2;for(let i=0,o=0;i=0;t--){let i=e.getMirror(t);this.appendMap(e._maps[t].invert(),i!=null&&i>t?r-i-1:void 0)}}invert(){let e=new n;return e.appendMappingInverted(this),e}map(e,t=1){if(this.mirror)return this._map(e,t,!0);for(let r=this.from;ro&&a!s.isAtom||!l.type.allowsMarkType(this.mark.type)?s:s.mark(this.mark.addToSet(s.marks)),i),t.openStart,t.openEnd);return L.fromReplace(e,this.from,this.to,o)}invert(){return new Pe(this.from,this.to,this.mark)}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return t.deleted&&r.deleted||t.pos>=r.pos?null:new n(t.pos,r.pos,this.mark)}merge(e){return e instanceof n&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new n(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"addMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number")throw new RangeError("Invalid input for AddMarkStep.fromJSON");return new n(t.from,t.to,e.markFromJSON(t.mark))}};z.jsonID("addMark",ft);var Pe=class n extends z{constructor(e,t,r){super(),this.from=e,this.to=t,this.mark=r}apply(e){let t=e.slice(this.from,this.to),r=new b(Or(t.content,i=>i.mark(this.mark.removeFromSet(i.marks)),e),t.openStart,t.openEnd);return L.fromReplace(e,this.from,this.to,r)}invert(){return new ft(this.from,this.to,this.mark)}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return t.deleted&&r.deleted||t.pos>=r.pos?null:new n(t.pos,r.pos,this.mark)}merge(e){return e instanceof n&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new n(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"removeMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number")throw new RangeError("Invalid input for RemoveMarkStep.fromJSON");return new n(t.from,t.to,e.markFromJSON(t.mark))}};z.jsonID("removeMark",Pe);var pt=class n extends z{constructor(e,t){super(),this.pos=e,this.mark=t}apply(e){let t=e.nodeAt(this.pos);if(!t)return L.fail("No node at mark step's position");let r=t.type.create(t.attrs,null,this.mark.addToSet(t.marks));return L.fromReplace(e,this.pos,this.pos+1,new b(k.from(r),0,t.isLeaf?0:1))}invert(e){let t=e.nodeAt(this.pos);if(t){let r=this.mark.addToSet(t.marks);if(r.length==t.marks.length){for(let i=0;ir.pos?null:new n(t.pos,r.pos,i,o,this.slice,this.insert,this.structure)}toJSON(){let e={stepType:"replaceAround",from:this.from,to:this.to,gapFrom:this.gapFrom,gapTo:this.gapTo,insert:this.insert};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number"||typeof t.gapFrom!="number"||typeof t.gapTo!="number"||typeof t.insert!="number")throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON");return new n(t.from,t.to,t.gapFrom,t.gapTo,b.fromJSON(e,t.slice),t.insert,!!t.structure)}};z.jsonID("replaceAround",I);function Mr(n,e,t){let r=n.resolve(e),i=t-e,o=r.depth;for(;i>0&&o>0&&r.indexAfter(o)==r.node(o).childCount;)o--,i--;if(i>0){let s=r.node(o).maybeChild(r.indexAfter(o));for(;i>0;){if(!s||s.isLeaf)return!0;s=s.firstChild,i--}}return!1}function ac(n,e,t,r){let i=[],o=[],s,l;n.doc.nodesBetween(e,t,(a,c,d)=>{if(!a.isInline)return;let u=a.marks;if(!r.isInSet(u)&&d.type.allowsMarkType(r.type)){let f=Math.max(c,e),p=Math.min(c+a.nodeSize,t),h=r.addToSet(u);for(let m=0;mn.step(a)),o.forEach(a=>n.step(a))}function cc(n,e,t,r){let i=[],o=0;n.doc.nodesBetween(e,t,(s,l)=>{if(!s.isInline)return;o++;let a=null;if(r instanceof at){let c=s.marks,d;for(;d=r.isInSet(c);)(a||(a=[])).push(d),c=d.removeFromSet(c)}else r?r.isInSet(s.marks)&&(a=[r]):a=s.marks;if(a&&a.length){let c=Math.min(l+s.nodeSize,t);for(let d=0;dn.step(new Pe(s.from,s.to,s.style)))}function Tr(n,e,t,r=t.contentMatch,i=!0){let o=n.doc.nodeAt(e),s=[],l=e+1;for(let a=0;a=0;a--)n.step(s[a])}function dc(n,e,t){return(e==0||n.canReplace(e,n.childCount))&&(t==n.childCount||n.canReplace(0,t))}function me(n){let t=n.parent.content.cutByIndex(n.startIndex,n.endIndex);for(let r=n.depth,i=0,o=0;;--r){let s=n.$from.node(r),l=n.$from.index(r)+i,a=n.$to.indexAfter(r)-o;if(rt;h--)m||r.index(h)>0?(m=!0,d=k.from(r.node(h).copy(d)),u++):a--;let f=k.empty,p=0;for(let h=o,m=!1;h>t;h--)m||i.after(h+1)=0;s--){if(r.size){let l=t[s].type.contentMatch.matchFragment(r);if(!l||!l.validEnd)throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper")}r=k.from(t[s].type.create(t[s].attrs,r))}let i=e.start,o=e.end;n.step(new I(i,o,i,o,new b(r,0,0),t.length,!0))}function mc(n,e,t,r,i){if(!r.isTextblock)throw new RangeError("Type given to setBlockType should be a textblock");let o=n.steps.length;n.doc.nodesBetween(e,t,(s,l)=>{let a=typeof i=="function"?i(s):i;if(s.isTextblock&&!s.hasMarkup(r,a)&&gc(n.doc,n.mapping.slice(o).map(l),r)){let c=null;if(r.schema.linebreakReplacement){let p=r.whitespace=="pre",h=!!r.contentMatch.matchType(r.schema.linebreakReplacement);p&&!h?c=!1:!p&&h&&(c=!0)}c===!1&&ts(n,s,l,o),Tr(n,n.mapping.slice(o).map(l,1),r,void 0,c===null);let d=n.mapping.slice(o),u=d.map(l,1),f=d.map(l+s.nodeSize,1);return n.step(new I(u,f,u+1,f-1,new b(k.from(r.create(a,null,s.marks)),0,0),1,!0)),c===!0&&es(n,s,l,o),!1}})}function es(n,e,t,r){e.forEach((i,o)=>{if(i.isText){let s,l=/\r?\n|\r/g;for(;s=l.exec(i.text);){let a=n.mapping.slice(r).map(t+1+o+s.index);n.replaceWith(a,a+1,e.type.schema.linebreakReplacement.create())}}})}function ts(n,e,t,r){e.forEach((i,o)=>{if(i.type==i.type.schema.linebreakReplacement){let s=n.mapping.slice(r).map(t+1+o);n.replaceWith(s,s+1,e.type.schema.text(` -`))}})}function gc(n,e,t){let r=n.resolve(e),i=r.index();return r.parent.canReplaceWith(i,i+1,t)}function yc(n,e,t,r,i){let o=n.doc.nodeAt(e);if(!o)throw new RangeError("No node at given position");t||(t=o.type);let s=t.create(r,null,i||o.marks);if(o.isLeaf)return n.replaceWith(e,e+o.nodeSize,s);if(!t.validContent(o.content))throw new RangeError("Invalid content for node type "+t.name);n.step(new I(e,e+o.nodeSize,e+1,e+o.nodeSize-1,new b(k.from(s),0,0),1,!0))}function ee(n,e,t=1,r){let i=n.resolve(e),o=i.depth-t,s=r&&r[r.length-1]||i.parent;if(o<0||i.parent.type.spec.isolating||!i.parent.canReplace(i.index(),i.parent.childCount)||!s.type.validContent(i.parent.content.cutByIndex(i.index(),i.parent.childCount)))return!1;for(let c=i.depth-1,d=t-2;c>o;c--,d--){let u=i.node(c),f=i.index(c);if(u.type.spec.isolating)return!1;let p=u.content.cutByIndex(f,u.childCount),h=r&&r[d+1];h&&(p=p.replaceChild(0,h.type.create(h.attrs)));let m=r&&r[d]||u;if(!u.canReplace(f+1,u.childCount)||!m.type.validContent(p))return!1}let l=i.indexAfter(o),a=r&&r[0];return i.node(o).canReplaceWith(l,l,a?a.type:i.node(o+1).type)}function kc(n,e,t=1,r){let i=n.doc.resolve(e),o=k.empty,s=k.empty;for(let l=i.depth,a=i.depth-t,c=t-1;l>a;l--,c--){o=k.from(i.node(l).copy(o));let d=r&&r[c];s=k.from(d?d.type.create(d.attrs,s):i.node(l).copy(s))}n.step(new V(e,e,new b(o.append(s),t,t),!0))}function re(n,e){let t=n.resolve(e),r=t.index();return ns(t.nodeBefore,t.nodeAfter)&&t.parent.canReplace(r,r+1)}function bc(n,e){e.content.size||n.type.compatibleContent(e.type);let t=n.contentMatchAt(n.childCount),{linebreakReplacement:r}=n.type.schema;for(let i=0;i0?(o=r.node(i+1),l++,s=r.node(i).maybeChild(l)):(o=r.node(i).maybeChild(l-1),s=r.node(i+1)),o&&!o.isTextblock&&ns(o,s)&&r.node(i).canReplace(l,l+1))return e;if(i==0)break;e=t<0?r.before(i):r.after(i)}}function xc(n,e,t){let r=null,{linebreakReplacement:i}=n.doc.type.schema,o=n.doc.resolve(e-t),s=o.node().type;if(i&&s.inlineContent){let d=s.whitespace=="pre",u=!!s.contentMatch.matchType(i);d&&!u?r=!1:!d&&u&&(r=!0)}let l=n.steps.length;if(r===!1){let d=n.doc.resolve(e+t);ts(n,d.node(),d.before(),l)}s.inlineContent&&Tr(n,e+t-1,s,o.node().contentMatchAt(o.index()),r==null);let a=n.mapping.slice(l),c=a.map(e-t);if(n.step(new V(c,a.map(e+t,-1),b.empty,!0)),r===!0){let d=n.doc.resolve(c);es(n,d.node(),d.before(),n.steps.length)}return n}function rs(n,e,t){let r=n.resolve(e);if(r.parent.canReplaceWith(r.index(),r.index(),t))return e;if(r.parentOffset==0)for(let i=r.depth-1;i>=0;i--){let o=r.index(i);if(r.node(i).canReplaceWith(o,o,t))return r.before(i+1);if(o>0)return null}if(r.parentOffset==r.parent.content.size)for(let i=r.depth-1;i>=0;i--){let o=r.indexAfter(i);if(r.node(i).canReplaceWith(o,o,t))return r.after(i+1);if(o=0;s--){let l=s==r.depth?0:r.pos<=(r.start(s+1)+r.end(s+1))/2?-1:1,a=r.index(s)+(l>0?1:0),c=r.node(s),d=!1;if(o==1)d=c.canReplace(a,a,i);else{let u=c.contentMatchAt(a).findWrapping(i.firstChild.type);d=u&&c.canReplaceWith(a,a,u[0])}if(d)return l==0?r.pos:l<0?r.before(s+1):r.after(s+1)}return null}function ht(n,e,t=e,r=b.empty){if(e==t&&!r.size)return null;let i=n.resolve(e),o=n.resolve(t);return is(i,o,r)?new V(e,t,r):new Er(i,o,r).fit()}function is(n,e,t){return!t.openStart&&!t.openEnd&&n.start()==e.start()&&n.parent.canReplace(n.index(),e.index(),t.content)}var Er=class{constructor(e,t,r){this.$from=e,this.$to=t,this.unplaced=r,this.frontier=[],this.placed=k.empty;for(let i=0;i<=e.depth;i++){let o=e.node(i);this.frontier.push({type:o.type,match:o.contentMatchAt(e.indexAfter(i))})}for(let i=e.depth;i>0;i--)this.placed=k.from(e.node(i).copy(this.placed))}get depth(){return this.frontier.length-1}fit(){for(;this.unplaced.size;){let c=this.findFittable();c?this.placeNodes(c):this.openMore()||this.dropNode()}let e=this.mustMoveInline(),t=this.placed.size-this.depth-this.$from.depth,r=this.$from,i=this.close(e<0?this.$to:r.doc.resolve(e));if(!i)return null;let o=this.placed,s=r.depth,l=i.depth;for(;s&&l&&o.childCount==1;)o=o.firstChild.content,s--,l--;let a=new b(o,s,l);return e>-1?new I(r.pos,e,this.$to.pos,this.$to.end(),a,t):a.size||r.pos!=this.$to.pos?new V(r.pos,i.pos,a):null}findFittable(){let e=this.unplaced.openStart;for(let t=this.unplaced.content,r=0,i=this.unplaced.openEnd;r1&&(i=0),o.type.spec.isolating&&i<=r){e=r;break}t=o.content}for(let t=1;t<=2;t++)for(let r=t==1?e:this.unplaced.openStart;r>=0;r--){let i,o=null;r?(o=Cr(this.unplaced.content,r-1).firstChild,i=o.content):i=this.unplaced.content;let s=i.firstChild;for(let l=this.depth;l>=0;l--){let{type:a,match:c}=this.frontier[l],d,u=null;if(t==1&&(s?c.matchType(s.type)||(u=c.fillBefore(k.from(s),!1)):o&&a.compatibleContent(o.type)))return{sliceDepth:r,frontierDepth:l,parent:o,inject:u};if(t==2&&s&&(d=c.findWrapping(s.type)))return{sliceDepth:r,frontierDepth:l,parent:o,wrap:d};if(o&&c.matchType(o.type))break}}}openMore(){let{content:e,openStart:t,openEnd:r}=this.unplaced,i=Cr(e,t);return!i.childCount||i.firstChild.isLeaf?!1:(this.unplaced=new b(e,t+1,Math.max(r,i.size+t>=e.size-r?t+1:0)),!0)}dropNode(){let{content:e,openStart:t,openEnd:r}=this.unplaced,i=Cr(e,t);if(i.childCount<=1&&t>0){let o=e.size-t<=t+i.size;this.unplaced=new b(Bt(e,t-1,1),t-1,o?t-1:r)}else this.unplaced=new b(Bt(e,t,1),t,r)}placeNodes({sliceDepth:e,frontierDepth:t,parent:r,inject:i,wrap:o}){for(;this.depth>t;)this.closeFrontierNode();if(o)for(let m=0;m1||a==0||m.content.size)&&(u=g,d.push(ss(m.mark(f.allowedMarks(m.marks)),c==1?a:0,c==l.childCount?p:-1)))}let h=c==l.childCount;h||(p=-1),this.placed=zt(this.placed,t,k.from(d)),this.frontier[t].match=u,h&&p<0&&r&&r.type==this.frontier[this.depth].type&&this.frontier.length>1&&this.closeFrontierNode();for(let m=0,g=l;m1&&i==this.$to.end(--r);)++i;return i}findCloseLevel(e){e:for(let t=Math.min(this.depth,e.depth);t>=0;t--){let{match:r,type:i}=this.frontier[t],o=t=0;l--){let{match:a,type:c}=this.frontier[l],d=wr(e,l,c,a,!0);if(!d||d.childCount)continue e}return{depth:t,fit:s,move:o?e.doc.resolve(e.after(t+1)):e}}}}close(e){let t=this.findCloseLevel(e);if(!t)return null;for(;this.depth>t.depth;)this.closeFrontierNode();t.fit.childCount&&(this.placed=zt(this.placed,t.depth,t.fit)),e=t.move;for(let r=t.depth+1;r<=e.depth;r++){let i=e.node(r),o=i.type.contentMatch.fillBefore(i.content,!0,e.index(r));this.openFrontierNode(i.type,i.attrs,o)}return e}openFrontierNode(e,t=null,r){let i=this.frontier[this.depth];i.match=i.match.matchType(e),this.placed=zt(this.placed,this.depth,k.from(e.create(t,r))),this.frontier.push({type:e,match:e.contentMatch})}closeFrontierNode(){let t=this.frontier.pop().match.fillBefore(k.empty,!0);t.childCount&&(this.placed=zt(this.placed,this.frontier.length,t))}};function Bt(n,e,t){return e==0?n.cutByIndex(t,n.childCount):n.replaceChild(0,n.firstChild.copy(Bt(n.firstChild.content,e-1,t)))}function zt(n,e,t){return e==0?n.append(t):n.replaceChild(n.childCount-1,n.lastChild.copy(zt(n.lastChild.content,e-1,t)))}function Cr(n,e){for(let t=0;t1&&(r=r.replaceChild(0,ss(r.firstChild,e-1,r.childCount==1?t-1:0))),e>0&&(r=n.type.contentMatch.fillBefore(r).append(r),t<=0&&(r=r.append(n.type.contentMatch.matchFragment(r).fillBefore(k.empty,!0)))),n.copy(r)}function wr(n,e,t,r,i){let o=n.node(e),s=i?n.indexAfter(e):n.index(e);if(s==o.childCount&&!t.compatibleContent(o.type))return null;let l=r.fillBefore(o.content,!0,s);return l&&!Sc(t,o.content,s)?l:null}function Sc(n,e,t){for(let r=t;r0;f--,p--){let h=i.node(f).type.spec;if(h.defining||h.definingAsContext||h.isolating)break;s.indexOf(f)>-1?l=f:i.before(f)==p&&s.splice(1,0,-f)}let a=s.indexOf(l),c=[],d=r.openStart;for(let f=r.content,p=0;;p++){let h=f.firstChild;if(c.push(h),p==r.openStart)break;f=h.content}for(let f=d-1;f>=0;f--){let p=c[f],h=Cc(p.type);if(h&&!p.sameMarkup(i.node(Math.abs(l)-1)))d=f;else if(h||!p.type.isTextblock)break}for(let f=r.openStart;f>=0;f--){let p=(f+d+1)%(r.openStart+1),h=c[p];if(h)for(let m=0;m=0&&(n.replace(e,t,r),!(n.steps.length>u));f--){let p=s[f];p<0||(e=i.before(p),t=o.after(p))}}function ls(n,e,t,r,i){if(er){let o=i.contentMatchAt(0),s=o.fillBefore(n).append(n);n=s.append(o.matchFragment(s).fillBefore(k.empty,!0))}return n}function Mc(n,e,t,r){if(!r.isInline&&e==t&&n.doc.resolve(e).parent.content.size){let i=rs(n.doc,e,r.type);i!=null&&(e=t=i)}n.replaceRange(e,t,new b(k.from(r),0,0))}function Ec(n,e,t){let r=n.doc.resolve(e),i=n.doc.resolve(t);if(r.parent.isTextblock&&i.parent.isTextblock&&r.start()!=i.start()&&r.parentOffset==0&&i.parentOffset==0){let s=r.sharedDepth(t),l=!1;for(let a=r.depth;a>s;a--)r.node(a).type.spec.isolating&&(l=!0);for(let a=i.depth;a>s;a--)i.node(a).type.spec.isolating&&(l=!0);if(!l){for(let a=r.depth;a>0&&e==r.start(a);a--)e=r.before(a);for(let a=i.depth;a>0&&t==i.start(a);a--)t=i.before(a);r=n.doc.resolve(e),i=n.doc.resolve(t)}}let o=as(r,i);for(let s=0;s0&&(a||r.node(l-1).canReplace(r.index(l-1),i.indexAfter(l-1))))return n.delete(r.before(l),i.after(l))}for(let s=1;s<=r.depth&&s<=i.depth;s++)if(e-r.start(s)==r.depth-s&&t>r.end(s)&&i.end(s)-t!=i.depth-s&&r.start(s-1)==i.start(s-1)&&r.node(s-1).canReplace(r.index(s-1),i.index(s-1)))return n.delete(r.before(s),t);n.delete(e,t)}function as(n,e){let t=[],r=Math.min(n.depth,e.depth);for(let i=r;i>=0;i--){let o=n.start(i);if(oe.pos+(e.depth-i)||n.node(i).type.spec.isolating||e.node(i).type.spec.isolating)break;(o==e.start(i)||i==n.depth&&i==e.depth&&n.parent.inlineContent&&e.parent.inlineContent&&i&&e.start(i-1)==o-1)&&t.push(i)}return t}var Ft=class n extends z{constructor(e,t,r){super(),this.pos=e,this.attr=t,this.value=r}apply(e){let t=e.nodeAt(this.pos);if(!t)return L.fail("No node at attribute step's position");let r=Object.create(null);for(let o in t.attrs)r[o]=t.attrs[o];r[this.attr]=this.value;let i=t.type.create(r,null,t.marks);return L.fromReplace(e,this.pos,this.pos+1,new b(k.from(i),0,t.isLeaf?0:1))}getMap(){return he.empty}invert(e){return new n(this.pos,this.attr,e.nodeAt(this.pos).attrs[this.attr])}map(e){let t=e.mapResult(this.pos,1);return t.deletedAfter?null:new n(t.pos,this.attr,this.value)}toJSON(){return{stepType:"attr",pos:this.pos,attr:this.attr,value:this.value}}static fromJSON(e,t){if(typeof t.pos!="number"||typeof t.attr!="string")throw new RangeError("Invalid input for AttrStep.fromJSON");return new n(t.pos,t.attr,t.value)}};z.jsonID("attr",Ft);var Lt=class n extends z{constructor(e,t){super(),this.attr=e,this.value=t}apply(e){let t=Object.create(null);for(let i in e.attrs)t[i]=e.attrs[i];t[this.attr]=this.value;let r=e.type.create(t,e.content,e.marks);return L.ok(r)}getMap(){return he.empty}invert(e){return new n(this.attr,e.attrs[this.attr])}map(e){return this}toJSON(){return{stepType:"docAttr",attr:this.attr,value:this.value}}static fromJSON(e,t){if(typeof t.attr!="string")throw new RangeError("Invalid input for DocAttrStep.fromJSON");return new n(t.attr,t.value)}};z.jsonID("docAttr",Lt);var Je=class extends Error{};Je=function n(e){let t=Error.call(this,e);return t.__proto__=n.prototype,t};Je.prototype=Object.create(Error.prototype);Je.prototype.constructor=Je;Je.prototype.name="TransformError";var He=class{constructor(e){this.doc=e,this.steps=[],this.docs=[],this.mapping=new ut}get before(){return this.docs.length?this.docs[0]:this.doc}step(e){let t=this.maybeStep(e);if(t.failed)throw new Je(t.failed);return this}maybeStep(e){let t=e.apply(this.doc);return t.failed||this.addStep(e,t.doc),t}get docChanged(){return this.steps.length>0}changedRange(){let e=1e9,t=-1e9;for(let r=0;r{e=Math.min(e,l),t=Math.max(t,a)})}return e==1e9?null:{from:e,to:t}}addStep(e,t){this.docs.push(this.doc),this.steps.push(e),this.mapping.appendMap(e.getMap()),this.doc=t}replace(e,t=e,r=b.empty){let i=ht(this.doc,e,t,r);return i&&this.step(i),this}replaceWith(e,t,r){return this.replace(e,t,new b(k.from(r),0,0))}delete(e,t){return this.replace(e,t,b.empty)}insert(e,t){return this.replaceWith(e,e,t)}replaceRange(e,t,r){return wc(this,e,t,r),this}replaceRangeWith(e,t,r){return Mc(this,e,t,r),this}deleteRange(e,t){return Ec(this,e,t),this}lift(e,t){return uc(this,e,t),this}join(e,t=1){return xc(this,e,t),this}wrap(e,t){return hc(this,e,t),this}setBlockType(e,t=e,r,i=null){return mc(this,e,t,r,i),this}setNodeMarkup(e,t,r=null,i){return yc(this,e,t,r,i),this}setNodeAttribute(e,t,r){return this.step(new Ft(e,t,r)),this}setDocAttribute(e,t){return this.step(new Lt(e,t)),this}addNodeMark(e,t){return this.step(new pt(e,t)),this}removeNodeMark(e,t){let r=this.doc.nodeAt(e);if(!r)throw new RangeError("No node at position "+e);if(t instanceof D)t.isInSet(r.marks)&&this.step(new Ke(e,t));else{let i=r.marks,o,s=[];for(;o=t.isInSet(i);)s.push(new Ke(e,o)),i=o.removeFromSet(i);for(let l=s.length-1;l>=0;l--)this.step(s[l])}return this}split(e,t=1,r){return kc(this,e,t,r),this}addMark(e,t,r){return ac(this,e,t,r),this}removeMark(e,t,r){return cc(this,e,t,r),this}clearIncompatible(e,t,r){return Tr(this,e,t,r),this}};var Nr=Object.create(null),E=class{constructor(e,t,r){this.$anchor=e,this.$head=t,this.ranges=r||[new Ye(e.min(t),e.max(t))]}get anchor(){return this.$anchor.pos}get head(){return this.$head.pos}get from(){return this.$from.pos}get to(){return this.$to.pos}get $from(){return this.ranges[0].$from}get $to(){return this.ranges[0].$to}get empty(){let e=this.ranges;for(let t=0;t=0;o--){let s=t<0?mt(e.node(0),e.node(o),e.before(o+1),e.index(o),t,r):mt(e.node(0),e.node(o),e.after(o+1),e.index(o)+1,t,r);if(s)return s}return null}static near(e,t=1){return this.findFrom(e,t)||this.findFrom(e,-t)||new q(e.node(0))}static atStart(e){return mt(e,e,0,0,1)||new q(e)}static atEnd(e){return mt(e,e,e.content.size,e.childCount,-1)||new q(e)}static fromJSON(e,t){if(!t||!t.type)throw new RangeError("Invalid input for Selection.fromJSON");let r=Nr[t.type];if(!r)throw new RangeError(`No selection type ${t.type} defined`);return r.fromJSON(e,t)}static jsonID(e,t){if(e in Nr)throw new RangeError("Duplicate use of selection JSON ID "+e);return Nr[e]=t,t.prototype.jsonID=e,t}getBookmark(){return T.between(this.$anchor,this.$head).getBookmark()}};E.prototype.visible=!0;var Ye=class{constructor(e,t){this.$from=e,this.$to=t}},cs=!1;function ds(n){!cs&&!n.parent.inlineContent&&(cs=!0,console.warn("TextSelection endpoint not pointing into a node with inline content ("+n.parent.type.name+")"))}var T=class n extends E{constructor(e,t=e){ds(e),ds(t),super(e,t)}get $cursor(){return this.$anchor.pos==this.$head.pos?this.$head:null}map(e,t){let r=e.resolve(t.map(this.head));if(!r.parent.inlineContent)return E.near(r);let i=e.resolve(t.map(this.anchor));return new n(i.parent.inlineContent?i:r,r)}replace(e,t=b.empty){if(super.replace(e,t),t==b.empty){let r=this.$from.marksAcross(this.$to);r&&e.ensureMarks(r)}}eq(e){return e instanceof n&&e.anchor==this.anchor&&e.head==this.head}getBookmark(){return new kn(this.anchor,this.head)}toJSON(){return{type:"text",anchor:this.anchor,head:this.head}}static fromJSON(e,t){if(typeof t.anchor!="number"||typeof t.head!="number")throw new RangeError("Invalid input for TextSelection.fromJSON");return new n(e.resolve(t.anchor),e.resolve(t.head))}static create(e,t,r=t){let i=e.resolve(t);return new this(i,r==t?i:e.resolve(r))}static between(e,t,r){let i=e.pos-t.pos;if((!r||i)&&(r=i>=0?1:-1),!t.parent.inlineContent){let o=E.findFrom(t,r,!0)||E.findFrom(t,-r,!0);if(o)t=o.$head;else return E.near(t,r)}return e.parent.inlineContent||(i==0?e=t:(e=(E.findFrom(e,-r,!0)||E.findFrom(e,r,!0)).$anchor,e.pos0?0:1);i>0?s=0;s+=i){let l=e.child(s);if(l.isAtom){if(!o&&S.isSelectable(l))return S.create(n,t-(i<0?l.nodeSize:0))}else{let a=mt(n,l,t+i,i<0?l.childCount:0,i,o);if(a)return a}t+=l.nodeSize*i}return null}function us(n,e,t){let r=n.steps.length-1;if(r{s==null&&(s=d)}),n.setSelection(E.near(n.doc.resolve(s),t))}var fs=1,yn=2,ps=4,bn=class extends He{constructor(e){super(e.doc),this.curSelectionFor=0,this.updated=0,this.meta=Object.create(null),this.time=Date.now(),this.curSelection=e.selection,this.storedMarks=e.storedMarks}get selection(){return this.curSelectionFor0}setStoredMarks(e){return this.storedMarks=e,this.updated|=yn,this}ensureMarks(e){return D.sameSet(this.storedMarks||this.selection.$from.marks(),e)||this.setStoredMarks(e),this}addStoredMark(e){return this.ensureMarks(e.addToSet(this.storedMarks||this.selection.$head.marks()))}removeStoredMark(e){return this.ensureMarks(e.removeFromSet(this.storedMarks||this.selection.$head.marks()))}get storedMarksSet(){return(this.updated&yn)>0}addStep(e,t){super.addStep(e,t),this.updated=this.updated&~yn,this.storedMarks=null}setTime(e){return this.time=e,this}replaceSelection(e){return this.selection.replace(this,e),this}replaceSelectionWith(e,t=!0){let r=this.selection;return t&&(e=e.mark(this.storedMarks||(r.empty?r.$from.marks():r.$from.marksAcross(r.$to)||D.none))),r.replaceWith(this,e),this}deleteSelection(){return this.selection.replace(this),this}insertText(e,t,r){let i=this.doc.type.schema;if(t==null)return e?this.replaceSelectionWith(i.text(e),!0):this.deleteSelection();{if(r==null&&(r=t),!e)return this.deleteRange(t,r);let o=this.storedMarks;if(!o){let s=this.doc.resolve(t);o=r==t?s.marks():s.marksAcross(this.doc.resolve(r))}return this.replaceRangeWith(t,r,i.text(e,o)),!this.selection.empty&&this.selection.to==t+e.length&&this.setSelection(E.near(this.selection.$to)),this}}setMeta(e,t){return this.meta[typeof e=="string"?e:e.key]=t,this}getMeta(e){return this.meta[typeof e=="string"?e:e.key]}get isGeneric(){for(let e in this.meta)return!1;return!0}scrollIntoView(){return this.updated|=ps,this}get scrolledIntoView(){return(this.updated&ps)>0}};function hs(n,e){return!e||!n?n:n.bind(e)}var Ge=class{constructor(e,t,r){this.name=e,this.init=hs(t.init,r),this.apply=hs(t.apply,r)}},Tc=[new Ge("doc",{init(n){return n.doc||n.schema.topNodeType.createAndFill()},apply(n){return n.doc}}),new Ge("selection",{init(n,e){return n.selection||E.atStart(e.doc)},apply(n){return n.selection}}),new Ge("storedMarks",{init(n){return n.storedMarks||null},apply(n,e,t,r){return r.selection.$cursor?n.storedMarks:null}}),new Ge("scrollToSelection",{init(){return 0},apply(n,e){return n.scrolledIntoView?e+1:e}})],$t=class{constructor(e,t){this.schema=e,this.plugins=[],this.pluginsByKey=Object.create(null),this.fields=Tc.slice(),t&&t.forEach(r=>{if(this.pluginsByKey[r.key])throw new RangeError("Adding different instances of a keyed plugin ("+r.key+")");this.plugins.push(r),this.pluginsByKey[r.key]=r,r.spec.state&&this.fields.push(new Ge(r.key,r.spec.state,r))})}},jt=class n{constructor(e){this.config=e}get schema(){return this.config.schema}get plugins(){return this.config.plugins}apply(e){return this.applyTransaction(e).state}filterTransaction(e,t=-1){for(let r=0;rr.toJSON())),e&&typeof e=="object")for(let r in e){if(r=="doc"||r=="selection")throw new RangeError("The JSON fields `doc` and `selection` are reserved");let i=e[r],o=i.spec.state;o&&o.toJSON&&(t[r]=o.toJSON.call(i,this[i.key]))}return t}static fromJSON(e,t,r){if(!t)throw new RangeError("Invalid input for EditorState.fromJSON");if(!e.schema)throw new RangeError("Required config field 'schema' missing");let i=new $t(e.schema,e.plugins),o=new n(i);return i.fields.forEach(s=>{if(s.name=="doc")o.doc=Y.fromJSON(e.schema,t.doc);else if(s.name=="selection")o.selection=E.fromJSON(o.doc,t.selection);else if(s.name=="storedMarks")t.storedMarks&&(o.storedMarks=t.storedMarks.map(e.schema.markFromJSON));else{if(r)for(let l in r){let a=r[l],c=a.spec.state;if(a.key==s.name&&c&&c.fromJSON&&Object.prototype.hasOwnProperty.call(t,l)){o[s.name]=c.fromJSON.call(a,e,t[l],o);return}}o[s.name]=s.init(e,o)}}),o}};function ms(n,e,t){for(let r in n){let i=n[r];i instanceof Function?i=i.bind(e):r=="handleDOMEvents"&&(i=ms(i,e,{})),t[r]=i}return t}var P=class{constructor(e){this.spec=e,this.props={},e.props&&ms(e.props,this,this.props),this.key=e.key?e.key.key:gs("plugin")}getState(e){return e[this.key]}},Dr=Object.create(null);function gs(n){return n in Dr?n+"$"+ ++Dr[n]:(Dr[n]=0,n+"$")}var te=class{constructor(e="key"){this.key=gs(e)}get(e){return e.config.pluginsByKey[this.key]}getState(e){return e[this.key]}};var di={};ae(di,{Decoration:()=>de,DecorationSet:()=>X,EditorView:()=>wt,__endComposition:()=>nu,__parseFromClipboard:()=>tu});var $=function(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e},xt=function(n){let e=n.assignedSlot||n.parentNode;return e&&e.nodeType==11?e.host:e},zr=null,Ee=function(n,e,t){let r=zr||(zr=document.createRange());return r.setEnd(n,t??n.nodeValue.length),r.setStart(n,e||0),r},Nc=function(){zr=null},rt=function(n,e,t,r){return t&&(ys(n,e,t,r,-1)||ys(n,e,t,r,1))},Dc=/^(img|br|input|textarea|hr)$/i;function ys(n,e,t,r,i){for(var o;;){if(n==t&&e==r)return!0;if(e==(i<0?0:oe(n))){let s=n.parentNode;if(!s||s.nodeType!=1||Yt(n)||Dc.test(n.nodeName)||n.contentEditable=="false")return!1;e=$(n)+(i<0?0:1),n=s}else if(n.nodeType==1){let s=n.childNodes[e+(i<0?-1:0)];if(s.nodeType==1&&s.contentEditable=="false")if(!((o=s.pmViewDesc)===null||o===void 0)&&o.ignoreForSelection)e+=i;else return!1;else n=s,e=i<0?oe(n):0}else return!1}}function oe(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Ac(n,e){for(;;){if(n.nodeType==3&&e)return n;if(n.nodeType==1&&e>0){if(n.contentEditable=="false")return null;n=n.childNodes[e-1],e=oe(n)}else if(n.parentNode&&!Yt(n))e=$(n),n=n.parentNode;else return null}}function vc(n,e){for(;;){if(n.nodeType==3&&e2),ie=St||(ge?/Mac/.test(ge.platform):!1),Zs=ge?/Win/.test(ge.platform):!1,Oe=/Android \d/.test(Ve),Xt=!!ks&&"webkitFontSmoothing"in ks.documentElement.style,_c=Xt?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0;function Bc(n){let e=n.defaultView&&n.defaultView.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.documentElement.clientWidth,top:0,bottom:n.documentElement.clientHeight}}function Me(n,e){return typeof n=="number"?n:n[e]}function zc(n){let e=n.getBoundingClientRect(),t=e.width/n.offsetWidth||1,r=e.height/n.offsetHeight||1;return{left:e.left,right:e.left+n.clientWidth*t,top:e.top,bottom:e.top+n.clientHeight*r}}function bs(n,e,t){let r=n.someProp("scrollThreshold")||0,i=n.someProp("scrollMargin")||5,o=n.dom.ownerDocument;for(let s=t||n.dom;s;){if(s.nodeType!=1){s=xt(s);continue}let l=s,a=l==o.body,c=a?Bc(o):zc(l),d=0,u=0;if(e.topc.bottom-Me(r,"bottom")&&(u=e.bottom-e.top>c.bottom-c.top?e.top+Me(i,"top")-c.top:e.bottom-c.bottom+Me(i,"bottom")),e.leftc.right-Me(r,"right")&&(d=e.right-c.right+Me(i,"right")),d||u)if(a)o.defaultView.scrollBy(d,u);else{let p=l.scrollLeft,h=l.scrollTop;u&&(l.scrollTop+=u),d&&(l.scrollLeft+=d);let m=l.scrollLeft-p,g=l.scrollTop-h;e={left:e.left-m,top:e.top-g,right:e.right-m,bottom:e.bottom-g}}let f=a?"fixed":getComputedStyle(s).position;if(/^(fixed|sticky)$/.test(f))break;s=f=="absolute"?s.offsetParent:xt(s)}}function Fc(n){let e=n.dom.getBoundingClientRect(),t=Math.max(0,e.top),r,i;for(let o=(e.left+e.right)/2,s=t+1;s=t-20){r=l,i=a.top;break}}return{refDOM:r,refTop:i,stack:Qs(n.dom)}}function Qs(n){let e=[],t=n.ownerDocument;for(let r=n;r&&(e.push({dom:r,top:r.scrollTop,left:r.scrollLeft}),n!=t);r=xt(r));return e}function Lc({refDOM:n,refTop:e,stack:t}){let r=n?n.getBoundingClientRect().top:0;el(t,r==0?0:r-e)}function el(n,e){for(let t=0;t=l){s=Math.max(h.bottom,s),l=Math.min(h.top,l);let m=h.left>e.left?h.left-e.left:h.right=(h.left+h.right)/2?1:0));continue}}else h.top>e.top&&!a&&h.left<=e.left&&h.right>=e.left&&(a=d,c={left:Math.max(h.left,Math.min(h.right,e.left)),top:h.top});!t&&(e.left>=h.right&&e.top>=h.top||e.left>=h.left&&e.top>=h.bottom)&&(o=u+1)}}return!t&&a&&(t=a,i=c,r=0),t&&t.nodeType==3?$c(t,i):!t||r&&t.nodeType==1?{node:n,offset:o}:tl(t,i)}function $c(n,e){let t=n.nodeValue.length,r=document.createRange(),i;for(let o=0;o=(s.left+s.right)/2?1:0)};break}}return r.detach(),i||{node:n,offset:0}}function ti(n,e){return n.left>=e.left-1&&n.left<=e.right+1&&n.top>=e.top-1&&n.top<=e.bottom+1}function jc(n,e){let t=n.parentNode;return t&&/^li$/i.test(t.nodeName)&&e.left(s.left+s.right)/2?1:-1}return n.docView.posFromDOM(r,i,o)}function Kc(n,e,t,r){let i=-1;for(let o=e,s=!1;o!=n.dom;){let l=n.docView.nearestDesc(o,!0),a;if(!l)return null;if(l.dom.nodeType==1&&(l.node.isBlock&&l.parent||!l.contentDOM)&&((a=l.dom.getBoundingClientRect()).width||a.height)&&(l.node.isBlock&&l.parent&&!/^T(R|BODY|HEAD|FOOT)$/.test(l.dom.nodeName)&&(!s&&a.left>r.left||a.top>r.top?i=l.posBefore:(!s&&a.right-1?i:n.docView.posFromDOM(e,t,-1)}function nl(n,e,t){let r=n.childNodes.length;if(r&&t.tope.top&&i++}let c;Xt&&i&&r.nodeType==1&&(c=r.childNodes[i-1]).nodeType==1&&c.contentEditable=="false"&&c.getBoundingClientRect().top>=e.top&&i--,r==n.dom&&i==r.childNodes.length-1&&r.lastChild.nodeType==1&&e.top>r.lastChild.getBoundingClientRect().bottom?l=n.state.doc.content.size:(i==0||r.nodeType!=1||r.childNodes[i-1].nodeName!="BR")&&(l=Kc(n,r,i,e))}l==null&&(l=Wc(n,s,e));let a=n.docView.nearestDesc(s,!0);return{pos:l,inside:a?a.posAtStart-a.border:-1}}function xs(n){return n.top=0&&i==r.nodeValue.length?(a--,d=1):t<0?a--:c++,Wt(_e(Ee(r,a,c),d),d<0)}if(!n.state.doc.resolve(e-(o||0)).parent.inlineContent){if(o==null&&i&&(t<0||i==oe(r))){let a=r.childNodes[i-1];if(a.nodeType==1)return Rr(a.getBoundingClientRect(),!1)}if(o==null&&i=0)}if(o==null&&i&&(t<0||i==oe(r))){let a=r.childNodes[i-1],c=a.nodeType==3?Ee(a,oe(a)-(s?0:1)):a.nodeType==1&&(a.nodeName!="BR"||!a.nextSibling)?a:null;if(c)return Wt(_e(c,1),!1)}if(o==null&&i=0)}function Wt(n,e){if(n.width==0)return n;let t=e?n.left:n.right;return{top:n.top,bottom:n.bottom,left:t,right:t}}function Rr(n,e){if(n.height==0)return n;let t=e?n.top:n.bottom;return{top:t,bottom:t,left:n.left,right:n.right}}function il(n,e,t){let r=n.state,i=n.root.activeElement;r!=e&&n.updateState(e),i!=n.dom&&n.focus();try{return t()}finally{r!=e&&n.updateState(r),i!=n.dom&&i&&i.focus()}}function qc(n,e,t){let r=e.selection,i=t=="up"?r.$from:r.$to;return il(n,e,()=>{let{node:o}=n.docView.domFromPos(i.pos,t=="up"?-1:1);for(;;){let l=n.docView.nearestDesc(o,!0);if(!l)break;if(l.node.isBlock){o=l.contentDOM||l.dom;break}o=l.dom.parentNode}let s=rl(n,i.pos,1);for(let l=o.firstChild;l;l=l.nextSibling){let a;if(l.nodeType==1)a=l.getClientRects();else if(l.nodeType==3)a=Ee(l,0,l.nodeValue.length).getClientRects();else continue;for(let c=0;cd.top+1&&(t=="up"?s.top-d.top>(d.bottom-s.top)*2:d.bottom-s.bottom>(s.bottom-d.top)*2))return!1}}return!0})}var Uc=/[\u0590-\u08ac]/;function Gc(n,e,t){let{$head:r}=e.selection;if(!r.parent.isTextblock)return!1;let i=r.parentOffset,o=!i,s=i==r.parent.content.size,l=n.domSelection();return l?!Uc.test(r.parent.textContent)||!l.modify?t=="left"||t=="backward"?o:s:il(n,e,()=>{let{focusNode:a,focusOffset:c,anchorNode:d,anchorOffset:u}=n.domSelectionRange(),f=l.caretBidiLevel;l.modify("move",t,"character");let p=r.depth?n.docView.domAfterPos(r.before()):n.dom,{focusNode:h,focusOffset:m}=n.domSelectionRange(),g=h&&!p.contains(h.nodeType==1?h:h.parentNode)||a==h&&c==m;try{l.collapse(d,u),a&&(a!=d||c!=u)&&l.extend&&l.extend(a,c)}catch{}return f!=null&&(l.caretBidiLevel=f),g}):r.pos==r.start()||r.pos==r.end()}var Ss=null,Cs=null,ws=!1;function Yc(n,e,t){return Ss==e&&Cs==t?ws:(Ss=e,Cs=t,ws=t=="up"||t=="down"?qc(n,e,t):Gc(n,e,t))}var le=0,Ms=1,Ze=2,ye=3,it=class{constructor(e,t,r,i){this.parent=e,this.children=t,this.dom=r,this.contentDOM=i,this.dirty=le,r.pmViewDesc=this}matchesWidget(e){return!1}matchesMark(e){return!1}matchesNode(e,t,r){return!1}matchesHack(e){return!1}parseRule(){return null}stopEvent(e){return!1}get size(){let e=0;for(let t=0;t$(this.contentDOM);else if(this.contentDOM&&this.contentDOM!=this.dom&&this.dom.contains(this.contentDOM))i=e.compareDocumentPosition(this.contentDOM)&2;else if(this.dom.firstChild){if(t==0)for(let o=e;;o=o.parentNode){if(o==this.dom){i=!1;break}if(o.previousSibling)break}if(i==null&&t==e.childNodes.length)for(let o=e;;o=o.parentNode){if(o==this.dom){i=!0;break}if(o.nextSibling)break}}return i??r>0?this.posAtEnd:this.posAtStart}nearestDesc(e,t=!1){for(let r=!0,i=e;i;i=i.parentNode){let o=this.getDesc(i),s;if(o&&(!t||o.node))if(r&&(s=o.nodeDOM)&&!(s.nodeType==1?s.contains(e.nodeType==1?e:e.parentNode):s==e))r=!1;else return o}}getDesc(e){let t=e.pmViewDesc;for(let r=t;r;r=r.parent)if(r==this)return t}posFromDOM(e,t,r){for(let i=e;i;i=i.parentNode){let o=this.getDesc(i);if(o)return o.localPosFromDOM(e,t,r)}return-1}descAt(e){for(let t=0,r=0;te||s instanceof Cn){i=e-o;break}o=l}if(i)return this.children[r].domFromPos(i-this.children[r].border,t);for(let o;r&&!(o=this.children[r-1]).size&&o instanceof xn&&o.side>=0;r--);if(t<=0){let o,s=!0;for(;o=r?this.children[r-1]:null,!(!o||o.dom.parentNode==this.contentDOM);r--,s=!1);return o&&t&&s&&!o.border&&!o.domAtom?o.domFromPos(o.size,t):{node:this.contentDOM,offset:o?$(o.dom)+1:0}}else{let o,s=!0;for(;o=r=d&&t<=c-a.border&&a.node&&a.contentDOM&&this.contentDOM.contains(a.contentDOM))return a.parseRange(e,t,d);e=s;for(let u=l;u>0;u--){let f=this.children[u-1];if(f.size&&f.dom.parentNode==this.contentDOM&&!f.emptyChildAt(1)){i=$(f.dom)+1;break}e-=f.size}i==-1&&(i=0)}if(i>-1&&(c>t||l==this.children.length-1)){t=c;for(let d=l+1;dh&&st){let h=l;l=a,a=h}let p=document.createRange();p.setEnd(a.node,a.offset),p.setStart(l.node,l.offset),c.removeAllRanges(),c.addRange(p)}}ignoreMutation(e){return!this.contentDOM&&e.type!="selection"}get contentLost(){return this.contentDOM&&this.contentDOM!=this.dom&&!this.dom.contains(this.contentDOM)}markDirty(e,t){for(let r=0,i=0;i=r:er){let l=r+o.border,a=s-o.border;if(e>=l&&t<=a){this.dirty=e==r||t==s?Ze:Ms,e==l&&t==a&&(o.contentLost||o.dom.parentNode!=this.contentDOM)?o.dirty=ye:o.markDirty(e-l,t-l);return}else o.dirty=o.dom==o.contentDOM&&o.dom.parentNode==this.contentDOM&&!o.children.length?Ze:ye}r=s}this.dirty=Ze}markParentsDirty(){let e=1;for(let t=this.parent;t;t=t.parent,e++){let r=e==1?Ze:Ms;t.dirty{if(!o)return i;if(o.parent)return o.parent.posBeforeChild(o)})),!t.type.spec.raw){if(s.nodeType!=1){let l=document.createElement("span");l.appendChild(s),s=l}s.contentEditable="false",s.classList.add("ProseMirror-widget")}super(e,[],s,null),this.widget=t,this.widget=t,o=this}matchesWidget(e){return this.dirty==le&&e.type.eq(this.widget.type)}parseRule(){return{ignore:!0}}stopEvent(e){let t=this.widget.spec.stopEvent;return t?t(e):!1}ignoreMutation(e){return e.type!="selection"||this.widget.spec.ignoreSelection}destroy(){this.widget.type.destroy(this.dom),super.destroy()}get domAtom(){return!0}get ignoreForSelection(){return!!this.widget.type.spec.relaxedSide}get side(){return this.widget.type.side}},$r=class extends it{constructor(e,t,r,i){super(e,[],t,null),this.textDOM=r,this.text=i}get size(){return this.text.length}localPosFromDOM(e,t){return e!=this.textDOM?this.posAtStart+(t?this.size:0):this.posAtStart+t}domFromPos(e){return{node:this.textDOM,offset:e}}ignoreMutation(e){return e.type==="characterData"&&e.target.nodeValue==e.oldValue}},Ct=class n extends it{constructor(e,t,r,i,o){super(e,[],r,i),this.mark=t,this.spec=o}static create(e,t,r,i){let o=i.nodeViews[t.type.name],s=o&&o(t,i,r);return(!s||!s.dom)&&(s=pe.renderSpec(document,t.type.spec.toDOM(t,r),null,t.attrs)),new n(e,t,s.dom,s.contentDOM||s.dom,s)}parseRule(){return this.dirty&ye||this.mark.type.spec.reparseInView?null:{mark:this.mark.type.name,attrs:this.mark.attrs,contentElement:this.contentDOM}}matchesMark(e){return this.dirty!=ye&&this.mark.eq(e)}markDirty(e,t){if(super.markDirty(e,t),this.dirty!=le){let r=this.parent;for(;!r.node;)r=r.parent;r.dirty0&&(o=Jr(o,0,e,r));for(let l=0;l{if(!a)return s;if(a.parent)return a.parent.posBeforeChild(a)},r,i),d=c&&c.dom,u=c&&c.contentDOM;if(t.isText){if(!d)d=document.createTextNode(t.text);else if(d.nodeType!=3)throw new RangeError("Text must be rendered as a DOM text node")}else d||({dom:d,contentDOM:u}=pe.renderSpec(document,t.type.spec.toDOM(t),null,t.attrs));!u&&!t.isText&&d.nodeName!="BR"&&(d.hasAttribute("contenteditable")||(d.contentEditable="false"),t.type.spec.draggable&&(d.draggable=!0));let f=d;return d=ll(d,r,t),c?a=new jr(e,t,r,i,d,u||null,f,c,o,s+1):t.isText?new Sn(e,t,r,i,d,f,o):new n(e,t,r,i,d,u||null,f,o,s+1)}parseRule(){if(this.node.type.spec.reparseInView)return null;let e={node:this.node.type.name,attrs:this.node.attrs};if(this.node.type.whitespace=="pre"&&(e.preserveWhitespace="full"),!this.contentDOM)e.getContent=()=>this.node.content;else if(!this.contentLost)e.contentElement=this.contentDOM;else{for(let t=this.children.length-1;t>=0;t--){let r=this.children[t];if(this.dom.contains(r.dom.parentNode)){e.contentElement=r.dom.parentNode;break}}e.contentElement||(e.getContent=()=>k.empty)}return e}matchesNode(e,t,r){return this.dirty==le&&e.eq(this.node)&&wn(t,this.outerDeco)&&r.eq(this.innerDeco)}get size(){return this.node.nodeSize}get border(){return this.node.isLeaf?0:1}updateChildren(e,t){let r=this.node.inlineContent,i=t,o=e.composing?this.localCompositionInfo(e,t):null,s=o&&o.pos>-1?o:null,l=o&&o.pos<0,a=new Kr(this,s&&s.node,e);ed(this.node,this.innerDeco,(c,d,u)=>{c.spec.marks?a.syncToMarks(c.spec.marks,r,e,d):c.type.side>=0&&!u&&a.syncToMarks(d==this.node.childCount?D.none:this.node.child(d).marks,r,e,d),a.placeWidget(c,e,i)},(c,d,u,f)=>{a.syncToMarks(c.marks,r,e,f);let p;a.findNodeMatch(c,d,u,f)||l&&e.state.selection.from>i&&e.state.selection.to-1&&a.updateNodeAt(c,d,u,p,e)||a.updateNextNode(c,d,u,e,f,i)||a.addNode(c,d,u,e,i),i+=c.nodeSize}),a.syncToMarks([],r,e,0),this.node.isTextblock&&a.addTextblockHacks(),a.destroyRest(),(a.changed||this.dirty==Ze)&&(s&&this.protectLocalComposition(e,s),ol(this.contentDOM,this.children,e),St&&td(this.dom))}localCompositionInfo(e,t){let{from:r,to:i}=e.state.selection;if(!(e.state.selection instanceof T)||rt+this.node.content.size)return null;let o=e.input.compositionNode;if(!o||!this.dom.contains(o.parentNode))return null;if(this.node.inlineContent){let s=o.nodeValue,l=nd(this.node.content,s,r-t,i-t);return l<0?null:{node:o,pos:l,text:s}}else return{node:o,pos:-1,text:""}}protectLocalComposition(e,{node:t,pos:r,text:i}){if(this.getDesc(t))return;let o=t;for(;o.parentNode!=this.contentDOM;o=o.parentNode){for(;o.previousSibling;)o.parentNode.removeChild(o.previousSibling);for(;o.nextSibling;)o.parentNode.removeChild(o.nextSibling);o.pmViewDesc&&(o.pmViewDesc=void 0)}let s=new $r(this,o,t,i);e.input.compositionNodes.push(s),this.children=Jr(this.children,r,r+i.length,e,s)}update(e,t,r,i){return this.dirty==ye||!e.sameMarkup(this.node)?!1:(this.updateInner(e,t,r,i),!0)}updateInner(e,t,r,i){this.updateOuterDeco(t),this.node=e,this.innerDeco=r,this.contentDOM&&this.updateChildren(i,this.posAtStart),this.dirty=le}updateOuterDeco(e){if(wn(e,this.outerDeco))return;let t=this.nodeDOM.nodeType!=1,r=this.dom;this.dom=sl(this.dom,this.nodeDOM,Wr(this.outerDeco,this.node,t),Wr(e,this.node,t)),this.dom!=r&&(r.pmViewDesc=void 0,this.dom.pmViewDesc=this),this.outerDeco=e}selectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.add("ProseMirror-selectednode"),(this.contentDOM||!this.node.type.spec.draggable)&&(this.nodeDOM.draggable=!0))}deselectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.remove("ProseMirror-selectednode"),(this.contentDOM||!this.node.type.spec.draggable)&&this.nodeDOM.removeAttribute("draggable"))}get domAtom(){return this.node.isAtom}};function Es(n,e,t,r,i){ll(r,e,n);let o=new Le(void 0,n,e,t,r,r,r,i,0);return o.contentDOM&&o.updateChildren(i,0),o}var Sn=class n extends Le{constructor(e,t,r,i,o,s,l){super(e,t,r,i,o,null,s,l,0)}parseRule(){let e=this.nodeDOM.parentNode;for(;e&&e!=this.dom&&!e.pmIsDeco;)e=e.parentNode;return{skip:e||!0}}update(e,t,r,i){return this.dirty==ye||this.dirty!=le&&!this.inParent()||!e.sameMarkup(this.node)?!1:(this.updateOuterDeco(t),(this.dirty!=le||e.text!=this.node.text)&&e.text!=this.nodeDOM.nodeValue&&(this.nodeDOM.nodeValue=e.text,i.trackWrites==this.nodeDOM&&(i.trackWrites=null)),this.node=e,this.dirty=le,!0)}inParent(){let e=this.parent.contentDOM;for(let t=this.nodeDOM;t;t=t.parentNode)if(t==e)return!0;return!1}domFromPos(e){return{node:this.nodeDOM,offset:e}}localPosFromDOM(e,t,r){return e==this.nodeDOM?this.posAtStart+Math.min(t,this.node.text.length):super.localPosFromDOM(e,t,r)}ignoreMutation(e){return e.type!="characterData"&&e.type!="selection"}slice(e,t,r){let i=this.node.cut(e,t),o=document.createTextNode(i.text);return new n(this.parent,i,this.outerDeco,this.innerDeco,o,o,r)}markDirty(e,t){super.markDirty(e,t),this.dom!=this.nodeDOM&&(e==0||t==this.nodeDOM.nodeValue.length)&&(this.dirty=ye)}get domAtom(){return!1}isText(e){return this.node.text==e}},Cn=class extends it{parseRule(){return{ignore:!0}}matchesHack(e){return this.dirty==le&&this.dom.nodeName==e}get domAtom(){return!0}get ignoreForCoords(){return this.dom.nodeName=="IMG"}},jr=class extends Le{constructor(e,t,r,i,o,s,l,a,c,d){super(e,t,r,i,o,s,l,c,d),this.spec=a}update(e,t,r,i){if(this.dirty==ye)return!1;if(this.spec.update&&(this.node.type==e.type||this.spec.multiType)){let o=this.spec.update(e,t,r);return o&&this.updateInner(e,t,r,i),o}else return!this.contentDOM&&!e.isLeaf?!1:super.update(e,t,r,i)}selectNode(){this.spec.selectNode?this.spec.selectNode():super.selectNode()}deselectNode(){this.spec.deselectNode?this.spec.deselectNode():super.deselectNode()}setSelection(e,t,r,i){this.spec.setSelection?this.spec.setSelection(e,t,r.root):super.setSelection(e,t,r,i)}destroy(){this.spec.destroy&&this.spec.destroy(),super.destroy()}stopEvent(e){return this.spec.stopEvent?this.spec.stopEvent(e):!1}ignoreMutation(e){return this.spec.ignoreMutation?this.spec.ignoreMutation(e):super.ignoreMutation(e)}};function ol(n,e,t){let r=n.firstChild,i=!1;for(let o=0;o>1,l=Math.min(s,e.length);for(;o-1)a>this.index&&(this.changed=!0,this.destroyBetween(this.index,a)),this.top=this.top.children[this.index];else{let d=Ct.create(this.top,e[s],t,r);this.top.children.splice(this.index,0,d),this.top=d,this.changed=!0}this.index=0,s++}}findNodeMatch(e,t,r,i){let o=-1,s;if(i>=this.preMatch.index&&(s=this.preMatch.matches[i-this.preMatch.index]).parent==this.top&&s.matchesNode(e,t,r))o=this.top.children.indexOf(s,this.index);else for(let l=this.index,a=Math.min(this.top.children.length,l+5);l0;){let l;for(;;)if(r){let c=t.children[r-1];if(c instanceof Ct)t=c,r=c.children.length;else{l=c,r--;break}}else{if(t==e)break e;r=t.parent.children.indexOf(t),t=t.parent}let a=l.node;if(a){if(a!=n.child(i-1))break;--i,o.set(l,i),s.push(l)}}return{index:i,matched:o,matches:s.reverse()}}function Qc(n,e){return n.type.side-e.type.side}function ed(n,e,t,r){let i=e.locals(n),o=0;if(i.length==0){for(let c=0;co;)l.push(i[s++]);let h=o+f.nodeSize;if(f.isText){let g=h;s!g.inline):l.slice();r(f,m,e.forChild(o,f),p),o=h}}function td(n){if(n.nodeName=="UL"||n.nodeName=="OL"){let e=n.style.cssText;n.style.cssText=e+"; list-style: square !important",window.getComputedStyle(n).listStyle,n.style.cssText=e}}function nd(n,e,t,r){for(let i=0,o=0;i=t){if(o>=r&&a.slice(r-e.length-l,r-l)==e)return r-e.length;let c=l=0&&c+e.length+l>=t)return l+c;if(t==r&&a.length>=r+e.length-l&&a.slice(r-l,r-l+e.length)==e)return r}}return-1}function Jr(n,e,t,r,i){let o=[];for(let s=0,l=0;s=t||d<=e?o.push(a):(ct&&o.push(a.slice(t-c,a.size,r)))}return o}function ni(n,e=null){let t=n.domSelectionRange(),r=n.state.doc;if(!t.focusNode)return null;let i=n.docView.nearestDesc(t.focusNode),o=i&&i.size==0,s=n.docView.posFromDOM(t.focusNode,t.focusOffset,1);if(s<0)return null;let l=r.resolve(s),a,c;if(Dn(t)){for(a=s;i&&!i.node;)i=i.parent;let u=i.node;if(i&&u.isAtom&&S.isSelectable(u)&&i.parent&&!(u.isInline&&Rc(t.focusNode,t.focusOffset,i.dom))){let f=i.posBefore;c=new S(s==f?l:r.resolve(f))}}else{if(t instanceof n.dom.ownerDocument.defaultView.Selection&&t.rangeCount>1){let u=s,f=s;for(let p=0;p{(t.anchorNode!=r||t.anchorOffset!=i)&&(e.removeEventListener("selectionchange",n.input.hideSelectionGuard),setTimeout(()=>{(!al(n)||n.state.selection.visible)&&n.dom.classList.remove("ProseMirror-hideselection")},20))})}function id(n){let e=n.domSelection();if(!e)return;let t=n.cursorWrapper.dom,r=t.nodeName=="IMG";r?e.collapse(t.parentNode,$(t)+1):e.collapse(t,0),!r&&!n.state.selection.visible&&ne&&Fe<=11&&(t.disabled=!0,t.disabled=!1)}function cl(n,e){if(e instanceof S){let t=n.docView.descAt(e.from);t!=n.lastSelectedViewDesc&&(As(n),t&&t.selectNode(),n.lastSelectedViewDesc=t)}else As(n)}function As(n){n.lastSelectedViewDesc&&(n.lastSelectedViewDesc.parent&&n.lastSelectedViewDesc.deselectNode(),n.lastSelectedViewDesc=void 0)}function ri(n,e,t,r){return n.someProp("createSelectionBetween",i=>i(n,e,t))||T.between(e,t,r)}function vs(n){return n.editable&&!n.hasFocus()?!1:dl(n)}function dl(n){let e=n.domSelectionRange();if(!e.anchorNode)return!1;try{return n.dom.contains(e.anchorNode.nodeType==3?e.anchorNode.parentNode:e.anchorNode)&&(n.editable||n.dom.contains(e.focusNode.nodeType==3?e.focusNode.parentNode:e.focusNode))}catch{return!1}}function od(n){let e=n.docView.domFromPos(n.state.selection.anchor,0),t=n.domSelectionRange();return rt(e.node,e.offset,t.anchorNode,t.anchorOffset)}function Hr(n,e){let{$anchor:t,$head:r}=n.selection,i=e>0?t.max(r):t.min(r),o=i.parent.inlineContent?i.depth?n.doc.resolve(e>0?i.after():i.before()):null:i;return o&&E.findFrom(o,e)}function Be(n,e){return n.dispatch(n.state.tr.setSelection(e).scrollIntoView()),!0}function Rs(n,e,t){let r=n.state.selection;if(r instanceof T)if(t.indexOf("s")>-1){let{$head:i}=r,o=i.textOffset?null:e<0?i.nodeBefore:i.nodeAfter;if(!o||o.isText||!o.isLeaf)return!1;let s=n.state.doc.resolve(i.pos+o.nodeSize*(e<0?-1:1));return Be(n,new T(r.$anchor,s))}else if(r.empty){if(n.endOfTextblock(e>0?"forward":"backward")){let i=Hr(n.state,e);return i&&i instanceof S?Be(n,i):!1}else if(!(ie&&t.indexOf("m")>-1)){let i=r.$head,o=i.textOffset?null:e<0?i.nodeBefore:i.nodeAfter,s;if(!o||o.isText)return!1;let l=e<0?i.pos-o.nodeSize:i.pos;return o.isAtom||(s=n.docView.descAt(l))&&!s.contentDOM?S.isSelectable(o)?Be(n,new S(e<0?n.state.doc.resolve(i.pos-o.nodeSize):i)):Xt?Be(n,new T(n.state.doc.resolve(e<0?l:l+o.nodeSize))):!1:!1}}else return!1;else{if(r instanceof S&&r.node.isInline)return Be(n,new T(e>0?r.$to:r.$from));{let i=Hr(n.state,e);return i?Be(n,i):!1}}}function Mn(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Jt(n,e){let t=n.pmViewDesc;return t&&t.size==0&&(e<0||n.nextSibling||n.nodeName!="BR")}function yt(n,e){return e<0?sd(n):ld(n)}function sd(n){let e=n.domSelectionRange(),t=e.focusNode,r=e.focusOffset;if(!t)return;let i,o,s=!1;for(se&&t.nodeType==1&&r0){if(t.nodeType!=1)break;{let l=t.childNodes[r-1];if(Jt(l,-1))i=t,o=--r;else if(l.nodeType==3)t=l,r=t.nodeValue.length;else break}}else{if(ul(t))break;{let l=t.previousSibling;for(;l&&Jt(l,-1);)i=t.parentNode,o=$(l),l=l.previousSibling;if(l)t=l,r=Mn(t);else{if(t=t.parentNode,t==n.dom)break;r=0}}}s?qr(n,t,r):i&&qr(n,i,o)}function ld(n){let e=n.domSelectionRange(),t=e.focusNode,r=e.focusOffset;if(!t)return;let i=Mn(t),o,s;for(;;)if(r{n.state==i&&Te(n)},50)}function Is(n,e){let t=n.state.doc.resolve(e);if(!(j||Zs)&&t.parent.inlineContent){let i=n.coordsAtPos(e);if(e>t.start()){let o=n.coordsAtPos(e-1),s=(o.top+o.bottom)/2;if(s>i.top&&s1)return o.lefti.top&&s1)return o.left>i.left?"ltr":"rtl"}}return getComputedStyle(n.dom).direction=="rtl"?"rtl":"ltr"}function Ps(n,e,t){let r=n.state.selection;if(r instanceof T&&!r.empty||t.indexOf("s")>-1||ie&&t.indexOf("m")>-1)return!1;let{$from:i,$to:o}=r;if(!i.parent.inlineContent||n.endOfTextblock(e<0?"up":"down")){let s=Hr(n.state,e);if(s&&s instanceof S)return Be(n,s)}if(!i.parent.inlineContent){let s=e<0?i:o,l=r instanceof q?E.near(s,e):E.findFrom(s,e);return l?Be(n,l):!1}return!1}function _s(n,e){if(!(n.state.selection instanceof T))return!0;let{$head:t,$anchor:r,empty:i}=n.state.selection;if(!t.sameParent(r))return!0;if(!i)return!1;if(n.endOfTextblock(e>0?"forward":"backward"))return!0;let o=!t.textOffset&&(e<0?t.nodeBefore:t.nodeAfter);if(o&&!o.isText){let s=n.state.tr;return e<0?s.delete(t.pos-o.nodeSize,t.pos):s.delete(t.pos,t.pos+o.nodeSize),n.dispatch(s),!0}return!1}function Bs(n,e,t){n.domObserver.stop(),e.contentEditable=t,n.domObserver.start()}function dd(n){if(!G||n.state.selection.$head.parentOffset>0)return!1;let{focusNode:e,focusOffset:t}=n.domSelectionRange();if(e&&e.nodeType==1&&t==0&&e.firstChild&&e.firstChild.contentEditable=="false"){let r=e.firstChild;Bs(n,r,"true"),setTimeout(()=>Bs(n,r,"false"),20)}return!1}function ud(n){let e="";return n.ctrlKey&&(e+="c"),n.metaKey&&(e+="m"),n.altKey&&(e+="a"),n.shiftKey&&(e+="s"),e}function fd(n,e){let t=e.keyCode,r=ud(e);if(t==8||ie&&t==72&&r=="c")return _s(n,-1)||yt(n,-1);if(t==46&&!e.shiftKey||ie&&t==68&&r=="c")return _s(n,1)||yt(n,1);if(t==13||t==27)return!0;if(t==37||ie&&t==66&&r=="c"){let i=t==37?Is(n,n.state.selection.from)=="ltr"?-1:1:-1;return Rs(n,i,r)||yt(n,i)}else if(t==39||ie&&t==70&&r=="c"){let i=t==39?Is(n,n.state.selection.from)=="ltr"?1:-1:1;return Rs(n,i,r)||yt(n,i)}else{if(t==38||ie&&t==80&&r=="c")return Ps(n,-1,r)||yt(n,-1);if(t==40||ie&&t==78&&r=="c")return dd(n)||Ps(n,1,r)||yt(n,1);if(r==(ie?"m":"c")&&(t==66||t==73||t==89||t==90))return!0}return!1}function ii(n,e){n.someProp("transformCopied",p=>{e=p(e,n)});let t=[],{content:r,openStart:i,openEnd:o}=e;for(;i>1&&o>1&&r.childCount==1&&r.firstChild.childCount==1;){i--,o--;let p=r.firstChild;t.push(p.type.name,p.attrs!=p.type.defaultAttrs?p.attrs:null),r=p.content}let s=n.someProp("clipboardSerializer")||pe.fromSchema(n.state.schema),l=gl(),a=l.createElement("div");a.appendChild(s.serializeFragment(r,{document:l}));let c=a.firstChild,d,u=0;for(;c&&c.nodeType==1&&(d=ml[c.nodeName.toLowerCase()]);){for(let p=d.length-1;p>=0;p--){let h=l.createElement(d[p]);for(;a.firstChild;)h.appendChild(a.firstChild);a.appendChild(h),u++}c=a.firstChild}c&&c.nodeType==1&&c.setAttribute("data-pm-slice",`${i} ${o}${u?` -${u}`:""} ${JSON.stringify(t)}`);let f=n.someProp("clipboardTextSerializer",p=>p(e,n))||e.content.textBetween(0,e.content.size,` +var ed=Object.defineProperty;var ce=(n,e)=>{for(var t in e)ed(n,t,{get:e[t],enumerable:!0})};var es="__LEPTOS_TIPTAP_BRIDGE__";function ts(){return{}}function ns(){let n=globalThis,e=n[es];if(e!=null)return e;let t={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return n[es]=t,t}var Ti={};ce(Ti,{CommandManager:()=>mt,Editor:()=>pi,Extension:()=>ge,InputRule:()=>Ze,Mark:()=>ur,Node:()=>hi,NodePos:()=>gr,NodeView:()=>mi,PasteRule:()=>zt,Tracker:()=>gi,callOrReturn:()=>N,canInsertNode:()=>Eh,combineTransactionSteps:()=>zp,createChainableState:()=>gn,createDocument:()=>hr,createNodeFromContent:()=>Lt,createStyleTag:()=>Qa,defaultBlockAt:()=>za,deleteProps:()=>fi,elementFromString:()=>Bt,escapeForRegEx:()=>Oh,extensions:()=>yh,findChildren:()=>Fp,findChildrenInRange:()=>Lp,findDuplicates:()=>Da,findParentNode:()=>Sn,findParentNodeClosestToPos:()=>Fa,fromString:()=>Oa,generateHTML:()=>$p,generateJSON:()=>Vp,generateText:()=>jp,getAttributes:()=>$a,getAttributesFromExtensions:()=>yi,getChangedRanges:()=>Kp,getDebugJSON:()=>ja,getExtensionField:()=>x,getHTMLFromFragment:()=>bn,getMarkAttributes:()=>Mi,getMarkRange:()=>kr,getMarkType:()=>ze,getMarksBetween:()=>Oi,getNodeAtPosition:()=>Hp,getNodeAttributes:()=>La,getNodeType:()=>V,getRenderedAttributes:()=>fr,getSchema:()=>xr,getSchemaByResolvedExtensions:()=>ki,getSchemaTypeByName:()=>dr,getSchemaTypeNameByName:()=>xn,getSplittedAttributes:()=>hn,getText:()=>Ei,getTextBetween:()=>xi,getTextContentFromNodes:()=>Ta,getTextSerializersFromSchema:()=>br,injectExtensionAttributesToParseRule:()=>ai,inputRulesPlugin:()=>Na,isActive:()=>Wa,isAtEndOfNode:()=>Jp,isAtStartOfNode:()=>qp,isEmptyObject:()=>Ea,isExtensionRulesEnabled:()=>ci,isFunction:()=>bi,isList:()=>ui,isMacOS:()=>Ci,isMarkActive:()=>mr,isNodeActive:()=>$t,isNodeEmpty:()=>Sr,isNodeSelection:()=>Up,isNumber:()=>Aa,isPlainObject:()=>pn,isRegExp:()=>yr,isSafari:()=>_a,isString:()=>Th,isTextSelection:()=>Si,isiOS:()=>Ft,markInputRule:()=>kh,markPasteRule:()=>Mh,mergeAttributes:()=>Ma,mergeDeep:()=>kn,minMax:()=>Ee,nodeInputRule:()=>xh,nodePasteRule:()=>Nh,objectIncludes:()=>mn,pasteRulesPlugin:()=>va,posToDOMRect:()=>Gp,removeDuplicates:()=>Va,resolveFocusPosition:()=>wi,rewriteUnknownContent:()=>Yp,selectionToInsertionEnd:()=>Ba,splitExtensions:()=>yn,textInputRule:()=>wh,textPasteRule:()=>Ah,textblockTypeInputRule:()=>Sh,wrappingInputRule:()=>Ch});var eo={};ce(eo,{AllSelection:()=>Z,EditorState:()=>tn,NodeSelection:()=>w,Plugin:()=>B,PluginKey:()=>K,Selection:()=>C,SelectionRange:()=>De,TextSelection:()=>O,Transaction:()=>Bn});function X(n){this.content=n}X.prototype={constructor:X,find:function(n){for(var e=0;e>1}};X.from=function(n){if(n instanceof X)return n;var e=[];if(n)for(var t in n)e.push(t,n[t]);return new X(e)};var Pr=X;function ps(n,e,t){for(let r=0;;r++){if(r==n.childCount||r==e.childCount)return n.childCount==e.childCount?null:t;let o=n.child(r),i=e.child(r);if(o==i){t+=o.nodeSize;continue}if(!o.sameMarkup(i))return t;if(o.isText&&o.text!=i.text){for(let s=0;o.text[s]==i.text[s];s++)t++;return t}if(o.content.size||i.content.size){let s=ps(o.content,i.content,t+1);if(s!=null)return s}t+=o.nodeSize}}function hs(n,e,t,r){for(let o=n.childCount,i=e.childCount;;){if(o==0||i==0)return o==i?null:{a:t,b:r};let s=n.child(--o),l=e.child(--i),a=s.nodeSize;if(s==l){t-=a,r-=a;continue}if(!s.sameMarkup(l))return{a:t,b:r};if(s.isText&&s.text!=l.text){let c=0,d=Math.min(s.text.length,l.text.length);for(;ce&&r(a,o+l,i||null,s)!==!1&&a.content.size){let d=l+1;a.nodesBetween(Math.max(0,e-d),Math.min(a.content.size,t-d),r,o+d)}l=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,r,o){let i="",s=!0;return this.nodesBetween(e,t,(l,a)=>{let c=l.isText?l.text.slice(Math.max(e,a)-a,t-a):l.isLeaf?o?typeof o=="function"?o(l):o:l.type.spec.leafText?l.type.spec.leafText(l):"":"";l.isBlock&&(l.isLeaf&&c||l.isTextblock)&&r&&(s?s=!1:i+=r),i+=c},0),i}append(e){if(!e.size)return this;if(!this.size)return e;let t=this.lastChild,r=e.firstChild,o=this.content.slice(),i=0;for(t.isText&&t.sameMarkup(r)&&(o[o.length-1]=t.withText(t.text+r.text),i=1);ie)for(let i=0,s=0;se&&((st)&&(l.isText?l=l.cut(Math.max(0,e-s),Math.min(l.text.length,t-s)):l=l.cut(Math.max(0,e-s-1),Math.min(l.content.size,t-s-1))),r.push(l),o+=l.nodeSize),s=a}return new n(r,o)}cutByIndex(e,t){return e==t?n.empty:e==0&&t==this.content.length?this:new n(this.content.slice(e,t))}replaceChild(e,t){let r=this.content[e];if(r==t)return this;let o=this.content.slice(),i=this.size+t.nodeSize-r.nodeSize;return o[e]=t,new n(o,i)}addToStart(e){return new n([e].concat(this.content),this.size+e.nodeSize)}addToEnd(e){return new n(this.content.concat(e),this.size+e.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let t=0;tthis.size||e<0)throw new RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,r=0;;t++){let o=this.child(t),i=r+o.nodeSize;if(i>=e)return i==e?Nn(t+1,i):Nn(t,r);r=i}}toString(){return"<"+this.toStringInner()+">"}toStringInner(){return this.content.join(", ")}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(e,t){if(!t)return n.empty;if(!Array.isArray(t))throw new RangeError("Invalid input for Fragment.fromJSON");return new n(t.map(e.nodeFromJSON))}static fromArray(e){if(!e.length)return n.empty;let t,r=0;for(let o=0;othis.type.rank&&(t||(t=e.slice(0,o)),t.push(this),r=!0),t&&t.push(i)}}return t||(t=e.slice()),r||t.push(this),t}removeFromSet(e){for(let t=0;tr.type.rank-o.type.rank),t}};R.none=[];var je=class extends Error{},k=class n{constructor(e,t,r){this.content=e,this.openStart=t,this.openEnd=r}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(e,t){let r=gs(this.content,e+this.openStart,t);return r&&new n(r,this.openStart,this.openEnd)}removeBetween(e,t){return new n(ms(this.content,e+this.openStart,t+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+"("+this.openStart+","+this.openEnd+")"}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(e,t){if(!t)return n.empty;let r=t.openStart||0,o=t.openEnd||0;if(typeof r!="number"||typeof o!="number")throw new RangeError("Invalid input for Slice.fromJSON");return new n(b.fromJSON(e,t.content),r,o)}static maxOpen(e,t=!0){let r=0,o=0;for(let i=e.firstChild;i&&!i.isLeaf&&(t||!i.type.spec.isolating);i=i.firstChild)r++;for(let i=e.lastChild;i&&!i.isLeaf&&(t||!i.type.spec.isolating);i=i.lastChild)o++;return new n(e,r,o)}};k.empty=new k(b.empty,0,0);function ms(n,e,t){let{index:r,offset:o}=n.findIndex(e),i=n.maybeChild(r),{index:s,offset:l}=n.findIndex(t);if(o==e||i.isText){if(l!=t&&!n.child(s).isText)throw new RangeError("Removing non-flat range");return n.cut(0,e).append(n.cut(t))}if(r!=s)throw new RangeError("Removing non-flat range");return n.replaceChild(r,i.copy(ms(i.content,e-o-1,t-o-1)))}function gs(n,e,t,r){let{index:o,offset:i}=n.findIndex(e),s=n.maybeChild(o);if(i==e||s.isText)return r&&!r.canReplace(o,o,t)?null:n.cut(0,e).append(t).append(n.cut(e));let l=gs(s.content,e-i-1,t,s);return l&&n.replaceChild(o,s.copy(l))}function td(n,e,t){if(t.openStart>n.depth)throw new je("Inserted content deeper than insertion position");if(n.depth-t.openStart!=e.depth-t.openEnd)throw new je("Inconsistent open depths");return ys(n,e,t,0)}function ys(n,e,t,r){let o=n.index(r),i=n.node(r);if(o==e.index(r)&&r=0&&n.isText&&n.sameMarkup(e[t])?e[t]=n.withText(e[t].text+n.text):e.push(n)}function Kt(n,e,t,r){let o=(e||n).node(t),i=0,s=e?e.index(t):o.childCount;n&&(i=n.index(t),n.depth>t?i++:n.textOffset&&(et(n.nodeAfter,r),i++));for(let l=i;lo&&Fr(n,e,o+1),s=r.depth>o&&Fr(t,r,o+1),l=[];return Kt(null,n,o,l),i&&s&&e.index(o)==t.index(o)?(bs(i,s),et(tt(i,ks(n,e,t,r,o+1)),l)):(i&&et(tt(i,Dn(n,e,o+1)),l),Kt(e,t,o,l),s&&et(tt(s,Dn(t,r,o+1)),l)),Kt(r,null,o,l),new b(l)}function Dn(n,e,t){let r=[];if(Kt(null,n,t,r),n.depth>t){let o=Fr(n,e,t+1);et(tt(o,Dn(n,e,t+1)),r)}return Kt(e,null,t,r),new b(r)}function nd(n,e){let t=e.depth-n.openStart,o=e.node(t).copy(n.content);for(let i=t-1;i>=0;i--)o=e.node(i).copy(b.from(o));return{start:o.resolveNoCache(n.openStart+t),end:o.resolveNoCache(o.content.size-n.openEnd-t)}}var Jt=class n{constructor(e,t,r){this.pos=e,this.path=t,this.parentOffset=r,this.depth=t.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position before the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw new RangeError("There is no position after the top-level node");return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;let r=this.pos-this.path[this.path.length-1],o=e.child(t);return r?e.child(t).cut(r):o}get nodeBefore(){let e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):e==0?null:this.parent.child(e-1)}posAtIndex(e,t){t=this.resolveDepth(t);let r=this.path[t*3],o=t==0?0:this.path[t*3-1]+1;for(let i=0;i0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0}blockRange(e=this,t){if(e.pos=0;r--)if(e.pos<=this.end(r)&&(!t||t(this.node(r))))return new We(this,e,r);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos=0&&t<=e.content.size))throw new RangeError("Position "+t+" out of range");let r=[],o=0,i=t;for(let s=e;;){let{index:l,offset:a}=s.content.findIndex(i),c=i-a;if(r.push(s,l,o+a),!c||(s=s.child(l),s.isText))break;i=c-1,o+=a+1}return new n(t,r,i)}static resolveCached(e,t){let r=rs.get(e);if(r)for(let i=0;ie&&this.nodesBetween(e,t,i=>(r.isInSet(i.marks)&&(o=!0),!o)),o}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+="("+this.content.toStringInner()+")"),xs(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw new Error("Called contentMatchAt on a node with invalid content");return t}canReplace(e,t,r=b.empty,o=0,i=r.childCount){let s=this.contentMatchAt(e).matchFragment(r,o,i),l=s&&s.matchFragment(this.content,t);if(!l||!l.validEnd)return!1;for(let a=o;at.type.name)}`);this.content.forEach(t=>t.check())}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(t=>t.toJSON())),e}static fromJSON(e,t){if(!t)throw new RangeError("Invalid input for Node.fromJSON");let r;if(t.marks){if(!Array.isArray(t.marks))throw new RangeError("Invalid mark data for Node.fromJSON");r=t.marks.map(e.markFromJSON)}if(t.type=="text"){if(typeof t.text!="string")throw new RangeError("Invalid text node in JSON");return e.text(t.text,r)}let o=b.fromJSON(e,t.content),i=e.nodeType(t.type).create(t.attrs,o,r);return i.type.checkAttrs(i.attrs),i}};te.prototype.text=void 0;var $r=class n extends te{constructor(e,t,r,o){if(super(e,t,null,o),!r)throw new RangeError("Empty text nodes are not allowed");this.text=r}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):xs(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,t){return this.text.slice(e,t)}get nodeSize(){return this.text.length}mark(e){return e==this.marks?this:new n(this.type,this.attrs,this.text,e)}withText(e){return e==this.text?this:new n(this.type,this.attrs,e,this.marks)}cut(e=0,t=this.text.length){return e==0&&t==this.text.length?this:this.withText(this.text.slice(e,t))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function xs(n,e){for(let t=n.length-1;t>=0;t--)e=n[t].type.name+"("+e+")";return e}var Ke=class n{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(e,t){let r=new Vr(e,t);if(r.next==null)return n.empty;let o=Ss(r);r.next&&r.err("Unexpected trailing text");let i=fd(dd(o));return ud(i,r),i}matchType(e){for(let t=0;tc.createAndFill()));for(let c=0;c=this.next.length)throw new RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(r){e.push(r);for(let o=0;o{let i=o+(r.validEnd?"*":" ")+" ";for(let s=0;s"+e.indexOf(r.next[s].next);return i}).join(` +`)}};Ke.empty=new Ke(!0);var Vr=class{constructor(e,t){this.string=e,this.nodeTypes=t,this.inline=null,this.pos=0,this.tokens=e.split(/\s*(?=\b|\W|$)/),this.tokens[this.tokens.length-1]==""&&this.tokens.pop(),this.tokens[0]==""&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw new SyntaxError(e+" (in content expression '"+this.string+"')")}};function Ss(n){let e=[];do e.push(id(n));while(n.eat("|"));return e.length==1?e[0]:{type:"choice",exprs:e}}function id(n){let e=[];do e.push(sd(n));while(n.next&&n.next!=")"&&n.next!="|");return e.length==1?e[0]:{type:"seq",exprs:e}}function sd(n){let e=cd(n);for(;;)if(n.eat("+"))e={type:"plus",expr:e};else if(n.eat("*"))e={type:"star",expr:e};else if(n.eat("?"))e={type:"opt",expr:e};else if(n.eat("{"))e=ld(n,e);else break;return e}function is(n){/\D/.test(n.next)&&n.err("Expected number, got '"+n.next+"'");let e=Number(n.next);return n.pos++,e}function ld(n,e){let t=is(n),r=t;return n.eat(",")&&(n.next!="}"?r=is(n):r=-1),n.eat("}")||n.err("Unclosed braced range"),{type:"range",min:t,max:r,expr:e}}function ad(n,e){let t=n.nodeTypes,r=t[e];if(r)return[r];let o=[];for(let i in t){let s=t[i];s.isInGroup(e)&&o.push(s)}return o.length==0&&n.err("No node type or group '"+e+"' found"),o}function cd(n){if(n.eat("(")){let e=Ss(n);return n.eat(")")||n.err("Missing closing paren"),e}else if(/\W/.test(n.next))n.err("Unexpected token '"+n.next+"'");else{let e=ad(n,n.next).map(t=>(n.inline==null?n.inline=t.isInline:n.inline!=t.isInline&&n.err("Mixing inline and block content"),{type:"name",value:t}));return n.pos++,e.length==1?e[0]:{type:"choice",exprs:e}}}function dd(n){let e=[[]];return o(i(n,0),t()),e;function t(){return e.push([])-1}function r(s,l,a){let c={term:a,to:l};return e[s].push(c),c}function o(s,l){s.forEach(a=>a.to=l)}function i(s,l){if(s.type=="choice")return s.exprs.reduce((a,c)=>a.concat(i(c,l)),[]);if(s.type=="seq")for(let a=0;;a++){let c=i(s.exprs[a],l);if(a==s.exprs.length-1)return c;o(c,l=t())}else if(s.type=="star"){let a=t();return r(l,a),o(i(s.expr,a),a),[r(a)]}else if(s.type=="plus"){let a=t();return o(i(s.expr,l),a),o(i(s.expr,a),a),[r(a)]}else{if(s.type=="opt")return[r(l)].concat(i(s.expr,l));if(s.type=="range"){let a=l;for(let c=0;c{n[s].forEach(({term:l,to:a})=>{if(!l)return;let c;for(let d=0;d{c||o.push([l,c=[]]),c.indexOf(d)==-1&&c.push(d)})})});let i=e[r.join(",")]=new Ke(r.indexOf(n.length-1)>-1);for(let s=0;s-1}get whitespace(){return this.spec.whitespace||(this.spec.code?"pre":"normal")}hasRequiredAttrs(){for(let e in this.attrs)if(this.attrs[e].isRequired)return!0;return!1}compatibleContent(e){return this==e||this.contentMatch.compatible(e.contentMatch)}computeAttrs(e){return!e&&this.defaultAttrs?this.defaultAttrs:Ms(this.attrs,e)}create(e=null,t,r){if(this.isText)throw new Error("NodeType.create can't construct text nodes");return new te(this,this.computeAttrs(e),b.from(t),R.setFrom(r))}createChecked(e=null,t,r){return t=b.from(t),this.checkContent(t),new te(this,this.computeAttrs(e),t,R.setFrom(r))}createAndFill(e=null,t,r){if(e=this.computeAttrs(e),t=b.from(t),t.size){let s=this.contentMatch.fillBefore(t);if(!s)return null;t=s.append(t)}let o=this.contentMatch.matchFragment(t),i=o&&o.fillBefore(b.empty,!0);return i?new te(this,e,t.append(i),R.setFrom(r)):null}validContent(e){let t=this.contentMatch.matchFragment(e);if(!t||!t.validEnd)return!1;for(let r=0;r-1}allowsMarks(e){if(this.markSet==null)return!0;for(let t=0;tr[i]=new n(i,t,s));let o=t.spec.topNode||"doc";if(!r[o])throw new RangeError("Schema is missing its top node type ('"+o+"')");if(!r.text)throw new RangeError("Every schema needs a 'text' type");for(let i in r.text.attrs)throw new RangeError("The text node type should not have attributes");return r}};function pd(n,e,t){let r=t.split("|");return o=>{let i=o===null?"null":typeof o;if(r.indexOf(i)<0)throw new RangeError(`Expected value of type ${r} for attribute ${e} on type ${n}, got ${i}`)}}var jr=class{constructor(e,t,r){this.hasDefault=Object.prototype.hasOwnProperty.call(r,"default"),this.default=r.default,this.validate=typeof r.validate=="string"?pd(e,t,r.validate):r.validate}get isRequired(){return!this.hasDefault}},bt=class n{constructor(e,t,r,o){this.name=e,this.rank=t,this.schema=r,this.spec=o,this.attrs=Os(e,o.attrs),this.excluded=null;let i=Cs(this.attrs);this.instance=i?new R(this,i):null}create(e=null){return!e&&this.instance?this.instance:new R(this,Ms(this.attrs,e))}static compile(e,t){let r=Object.create(null),o=0;return e.forEach((i,s)=>r[i]=new n(i,o++,t,s)),r}removeFromSet(e){for(var t=0;t-1}},kt=class{constructor(e){this.linebreakReplacement=null,this.cached=Object.create(null);let t=this.spec={};for(let o in e)t[o]=e[o];t.nodes=Pr.from(e.nodes),t.marks=Pr.from(e.marks||{}),this.nodes=qt.compile(this.spec.nodes,this),this.marks=bt.compile(this.spec.marks,this);let r=Object.create(null);for(let o in this.nodes){if(o in this.marks)throw new RangeError(o+" can not be both a node and a mark");let i=this.nodes[o],s=i.spec.content||"",l=i.spec.marks;if(i.contentMatch=r[s]||(r[s]=Ke.parse(s,this.nodes)),i.inlineContent=i.contentMatch.inlineContent,i.spec.linebreakReplacement){if(this.linebreakReplacement)throw new RangeError("Multiple linebreak nodes defined");if(!i.isInline||!i.isLeaf)throw new RangeError("Linebreak replacement nodes must be inline leaf nodes");this.linebreakReplacement=i}i.markSet=l=="_"?null:l?ls(this,l.split(" ")):l==""||!i.inlineContent?[]:null}for(let o in this.marks){let i=this.marks[o],s=i.spec.excludes;i.excluded=s==null?[i]:s==""?[]:ls(this,s.split(" "))}this.nodeFromJSON=o=>te.fromJSON(this,o),this.markFromJSON=o=>R.fromJSON(this,o),this.topNodeType=this.nodes[this.spec.topNode||"doc"],this.cached.wrappings=Object.create(null)}node(e,t=null,r,o){if(typeof e=="string")e=this.nodeType(e);else if(e instanceof qt){if(e.schema!=this)throw new RangeError("Node type from different schema used ("+e.name+")")}else throw new RangeError("Invalid node type: "+e);return e.createChecked(t,r,o)}text(e,t){let r=this.nodes.text;return new $r(r,r.defaultAttrs,e,R.setFrom(t))}mark(e,t){return typeof e=="string"&&(e=this.marks[e]),e.create(t)}nodeType(e){let t=this.nodes[e];if(!t)throw new RangeError("Unknown node type: "+e);return t}};function ls(n,e){let t=[];for(let r=0;r-1)&&t.push(s=a)}if(!s)throw new SyntaxError("Unknown mark type: '"+e[r]+"'")}return t}function hd(n){return n.tag!=null}function md(n){return n.style!=null}var me=class n{constructor(e,t){this.schema=e,this.rules=t,this.tags=[],this.styles=[];let r=this.matchedStyles=[];t.forEach(o=>{if(hd(o))this.tags.push(o);else if(md(o)){let i=/[^=]*/.exec(o.style)[0];r.indexOf(i)<0&&r.push(i),this.styles.push(o)}}),this.normalizeLists=!this.tags.some(o=>{if(!/^(ul|ol)\b/.test(o.tag)||!o.node)return!1;let i=e.nodes[o.node];return i.contentMatch.matchType(i)})}parse(e,t={}){let r=new Rn(this,t,!1);return r.addAll(e,R.none,t.from,t.to),r.finish()}parseSlice(e,t={}){let r=new Rn(this,t,!0);return r.addAll(e,R.none,t.from,t.to),k.maxOpen(r.finish())}matchTag(e,t,r){for(let o=r?this.tags.indexOf(r)+1:0;oe.length&&(l.charCodeAt(e.length)!=61||l.slice(e.length+1)!=t))){if(s.getAttrs){let a=s.getAttrs(t);if(a===!1)continue;s.attrs=a||void 0}return s}}}static schemaRules(e){let t=[];function r(o){let i=o.priority==null?50:o.priority,s=0;for(;s{r(s=cs(s)),s.mark||s.ignore||s.clearMark||(s.mark=o)})}for(let o in e.nodes){let i=e.nodes[o].spec.parseDOM;i&&i.forEach(s=>{r(s=cs(s)),s.node||s.ignore||s.mark||(s.node=o)})}return t}static fromSchema(e){return e.cached.domParser||(e.cached.domParser=new n(e,n.schemaRules(e)))}},Ts={address:!0,article:!0,aside:!0,blockquote:!0,canvas:!0,dd:!0,div:!0,dl:!0,fieldset:!0,figcaption:!0,figure:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,li:!0,noscript:!0,ol:!0,output:!0,p:!0,pre:!0,section:!0,table:!0,tfoot:!0,ul:!0},gd={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},Ns={ol:!0,ul:!0},Ut=1,Wr=2,Ht=4;function as(n,e,t){return e!=null?(e?Ut:0)|(e==="full"?Wr:0):n&&n.whitespace=="pre"?Ut|Wr:t&~Ht}var yt=class{constructor(e,t,r,o,i,s){this.type=e,this.attrs=t,this.marks=r,this.solid=o,this.options=s,this.content=[],this.activeMarks=R.none,this.match=i||(s&Ht?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let t=this.type.contentMatch.fillBefore(b.from(e));if(t)this.match=this.type.contentMatch.matchFragment(t);else{let r=this.type.contentMatch,o;return(o=r.findWrapping(e.type))?(this.match=r,o):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&Ut)){let r=this.content[this.content.length-1],o;if(r&&r.isText&&(o=/[ \t\r\n\u000c]+$/.exec(r.text))){let i=r;r.text.length==o[0].length?this.content.pop():this.content[this.content.length-1]=i.withText(i.text.slice(0,i.text.length-o[0].length))}}let t=b.from(this.content);return!e&&this.match&&(t=t.append(this.match.fillBefore(b.empty,!0))),this.type?this.type.create(this.attrs,t,this.marks):t}inlineContext(e){return this.type?this.type.inlineContent:this.content.length?this.content[0].isInline:e.parentNode&&!Ts.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}},Rn=class{constructor(e,t,r){this.parser=e,this.options=t,this.isOpen=r,this.open=0,this.localPreserveWS=!1;let o=t.topNode,i,s=as(null,t.preserveWhitespace,0)|(r?Ht:0);o?i=new yt(o.type,o.attrs,R.none,!0,t.topMatch||o.type.contentMatch,s):r?i=new yt(null,null,R.none,!0,null,s):i=new yt(e.schema.topNodeType,null,R.none,!0,null,s),this.nodes=[i],this.find=t.findPositions,this.needsBlock=!1}get top(){return this.nodes[this.open]}addDOM(e,t){e.nodeType==3?this.addTextNode(e,t):e.nodeType==1&&this.addElement(e,t)}addTextNode(e,t){let r=e.nodeValue,o=this.top,i=o.options&Wr?"full":this.localPreserveWS||(o.options&Ut)>0,{schema:s}=this.parser;if(i==="full"||o.inlineContext(e)||/[^ \t\r\n\u000c]/.test(r)){if(i)if(i==="full")r=r.replace(/\r\n?/g,` +`);else if(s.linebreakReplacement&&/[\r\n]/.test(r)&&this.top.findWrapping(s.linebreakReplacement.create())){let l=r.split(/\r?\n|\r/);for(let a=0;a!a.clearMark(c)):t=t.concat(this.parser.schema.marks[a.mark].create(a.attrs)),a.consuming===!1)l=a;else break}}return t}addElementByRule(e,t,r,o){let i,s;if(t.node)if(s=this.parser.schema.nodes[t.node],s.isLeaf)this.insertNode(s.create(t.attrs),r,e.nodeName=="BR")||this.leafFallback(e,r);else{let a=this.enter(s,t.attrs||null,r,t.preserveWhitespace);a&&(i=!0,r=a)}else{let a=this.parser.schema.marks[t.mark];r=r.concat(a.create(t.attrs))}let l=this.top;if(s&&s.isLeaf)this.findInside(e);else if(o)this.addElement(e,r,o);else if(t.getContent)this.findInside(e),t.getContent(e,this.parser.schema).forEach(a=>this.insertNode(a,r,!1));else{let a=e;typeof t.contentElement=="string"?a=e.querySelector(t.contentElement):typeof t.contentElement=="function"?a=t.contentElement(e):t.contentElement&&(a=t.contentElement),this.findAround(e,a,!0),this.addAll(a,r),this.findAround(e,a,!1)}i&&this.sync(l)&&this.open--}addAll(e,t,r,o){let i=r||0;for(let s=r?e.childNodes[r]:e.firstChild,l=o==null?null:e.childNodes[o];s!=l;s=s.nextSibling,++i)this.findAtPoint(e,i),this.addDOM(s,t);this.findAtPoint(e,i)}findPlace(e,t,r){let o,i;for(let s=this.open,l=0;s>=0;s--){let a=this.nodes[s],c=a.findWrapping(e);if(c&&(!o||o.length>c.length+l)&&(o=c,i=a,!c.length))break;if(a.solid){if(r)break;l+=2}}if(!o)return null;this.sync(i);for(let s=0;s(s.type?s.type.allowsMarkType(c.type):ds(c.type,e))?(a=c.addToSet(a),!1):!0),this.nodes.push(new yt(e,t,a,o,null,l)),this.open++,r}closeExtra(e=!1){let t=this.nodes.length-1;if(t>this.open){for(;t>this.open;t--)this.nodes[t-1].content.push(this.nodes[t].finish(e));this.nodes.length=this.open+1}}finish(){return this.open=0,this.closeExtra(this.isOpen),this.nodes[0].finish(!!(this.isOpen||this.options.topOpen))}sync(e){for(let t=this.open;t>=0;t--){if(this.nodes[t]==e)return this.open=t,!0;this.localPreserveWS&&(this.nodes[t].options|=Ut)}return!1}get currentPos(){this.closeExtra();let e=0;for(let t=this.open;t>=0;t--){let r=this.nodes[t].content;for(let o=r.length-1;o>=0;o--)e+=r[o].nodeSize;t&&e++}return e}findAtPoint(e,t){if(this.find)for(let r=0;r-1)return e.split(/\s*\|\s*/).some(this.matchesContext,this);let t=e.split("/"),r=this.options.context,o=!this.isOpen&&(!r||r.parent.type==this.nodes[0].type),i=-(r?r.depth+1:0)+(o?0:1),s=(l,a)=>{for(;l>=0;l--){let c=t[l];if(c==""){if(l==t.length-1||l==0)continue;for(;a>=i;a--)if(s(l-1,a))return!0;return!1}else{let d=a>0||a==0&&o?this.nodes[a].type:r&&a>=i?r.node(a-i).type:null;if(!d||d.name!=c&&!d.isInGroup(c))return!1;a--}}return!0};return s(t.length-1,this.open)}textblockFromContext(){let e=this.options.context;if(e)for(let t=e.depth;t>=0;t--){let r=e.node(t).contentMatchAt(e.indexAfter(t)).defaultType;if(r&&r.isTextblock&&r.defaultAttrs)return r}for(let t in this.parser.schema.nodes){let r=this.parser.schema.nodes[t];if(r.isTextblock&&r.defaultAttrs)return r}}};function yd(n){for(let e=n.firstChild,t=null;e;e=e.nextSibling){let r=e.nodeType==1?e.nodeName.toLowerCase():null;r&&Ns.hasOwnProperty(r)&&t?(t.appendChild(e),e=t):r=="li"?t=e:r&&(t=null)}}function bd(n,e){return(n.matches||n.msMatchesSelector||n.webkitMatchesSelector||n.mozMatchesSelector).call(n,e)}function cs(n){let e={};for(let t in n)e[t]=n[t];return e}function ds(n,e){let t=e.schema.nodes;for(let r in t){let o=t[r];if(!o.allowsMarkType(n))continue;let i=[],s=l=>{i.push(l);for(let a=0;a{if(i.length||s.marks.length){let l=0,a=0;for(;l=0;o--){let i=this.serializeMark(e.marks[o],e.isInline,t);i&&((i.contentDOM||i.dom).appendChild(r),r=i.dom)}return r}serializeMark(e,t,r={}){let o=this.marks[e.type.name];return o&&An(zr(r),o(e,t),null,e.attrs)}static renderSpec(e,t,r=null,o){return An(e,t,r,o)}static fromSchema(e){return e.cached.domSerializer||(e.cached.domSerializer=new n(this.nodesFromSchema(e),this.marksFromSchema(e)))}static nodesFromSchema(e){let t=fs(e.nodes);return t.text||(t.text=r=>r.text),t}static marksFromSchema(e){return fs(e.marks)}};function fs(n){let e={};for(let t in n){let r=n[t].spec.toDOM;r&&(e[t]=r)}return e}function zr(n){return n.document||window.document}var us=new WeakMap;function kd(n){let e=us.get(n);return e===void 0&&us.set(n,e=xd(n)),e}function xd(n){let e=null;function t(r){if(r&&typeof r=="object")if(Array.isArray(r))if(typeof r[0]=="string")e||(e=[]),e.push(r);else for(let o=0;o-1)throw new RangeError("Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.");let s=o.indexOf(" ");s>0&&(t=o.slice(0,s),o=o.slice(s+1));let l,a=t?n.createElementNS(t,o):n.createElement(o),c=e[1],d=1;if(c&&typeof c=="object"&&c.nodeType==null&&!Array.isArray(c)){d=2;for(let f in c)if(c[f]!=null){let u=f.indexOf(" ");u>0?a.setAttributeNS(f.slice(0,u),f.slice(u+1),c[f]):f=="style"&&a.style?a.style.cssText=c[f]:a.setAttribute(f,c[f])}}for(let f=d;fd)throw new RangeError("Content hole must be the only child of its parent node");return{dom:a,contentDOM:a}}else{let{dom:p,contentDOM:h}=An(n,u,t,r);if(a.appendChild(p),h){if(l)throw new RangeError("Multiple content holes");l=h}}}return{dom:a,contentDOM:l}}var Ds=65535,Rs=Math.pow(2,16);function Sd(n,e){return n+e*Rs}function As(n){return n&Ds}function wd(n){return(n-(n&Ds))/Rs}var Is=1,_s=2,In=4,Ps=8,xt=class{constructor(e,t,r){this.pos=e,this.delInfo=t,this.recover=r}get deleted(){return(this.delInfo&Ps)>0}get deletedBefore(){return(this.delInfo&(Is|In))>0}get deletedAfter(){return(this.delInfo&(_s|In))>0}get deletedAcross(){return(this.delInfo&In)>0}},xe=class n{constructor(e,t=!1){if(this.ranges=e,this.inverted=t,!e.length&&n.empty)return n.empty}recover(e){let t=0,r=As(e);if(!this.inverted)for(let o=0;oe)break;let c=this.ranges[l+i],d=this.ranges[l+s],f=a+c;if(e<=f){let u=c?e==a?-1:e==f?1:t:t,p=a+o+(u<0?0:d);if(r)return p;let h=e==(t<0?a:f)?null:Sd(l/3,e-a),m=e==a?_s:e==f?Is:In;return(t<0?e!=a:e!=f)&&(m|=Ps),new xt(p,m,h)}o+=d-c}return r?e+o:new xt(e+o,0,null)}touches(e,t){let r=0,o=As(t),i=this.inverted?2:1,s=this.inverted?1:2;for(let l=0;le)break;let c=this.ranges[l+i],d=a+c;if(e<=d&&l==o*3)return!0;r+=this.ranges[l+s]-c}return!1}forEach(e){let t=this.inverted?2:1,r=this.inverted?1:2;for(let o=0,i=0;o=0;t--){let o=e.getMirror(t);this.appendMap(e._maps[t].invert(),o!=null&&o>t?r-o-1:void 0)}}invert(){let e=new n;return e.appendMappingInverted(this),e}map(e,t=1){if(this.mirror)return this._map(e,t,!0);for(let r=this.from;ri&&a!s.isAtom||!l.type.allowsMarkType(this.mark.type)?s:s.mark(this.mark.addToSet(s.marks)),o),t.openStart,t.openEnd);return j.fromReplace(e,this.from,this.to,i)}invert(){return new He(this.from,this.to,this.mark)}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return t.deleted&&r.deleted||t.pos>=r.pos?null:new n(t.pos,r.pos,this.mark)}merge(e){return e instanceof n&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new n(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"addMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number")throw new RangeError("Invalid input for AddMarkStep.fromJSON");return new n(t.from,t.to,e.markFromJSON(t.mark))}};L.jsonID("addMark",wt);var He=class n extends L{constructor(e,t,r){super(),this.from=e,this.to=t,this.mark=r}apply(e){let t=e.slice(this.from,this.to),r=new k(Gr(t.content,o=>o.mark(this.mark.removeFromSet(o.marks)),e),t.openStart,t.openEnd);return j.fromReplace(e,this.from,this.to,r)}invert(){return new wt(this.from,this.to,this.mark)}map(e){let t=e.mapResult(this.from,1),r=e.mapResult(this.to,-1);return t.deleted&&r.deleted||t.pos>=r.pos?null:new n(t.pos,r.pos,this.mark)}merge(e){return e instanceof n&&e.mark.eq(this.mark)&&this.from<=e.to&&this.to>=e.from?new n(Math.min(this.from,e.from),Math.max(this.to,e.to),this.mark):null}toJSON(){return{stepType:"removeMark",mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number")throw new RangeError("Invalid input for RemoveMarkStep.fromJSON");return new n(t.from,t.to,e.markFromJSON(t.mark))}};L.jsonID("removeMark",He);var Ct=class n extends L{constructor(e,t){super(),this.pos=e,this.mark=t}apply(e){let t=e.nodeAt(this.pos);if(!t)return j.fail("No node at mark step's position");let r=t.type.create(t.attrs,null,this.mark.addToSet(t.marks));return j.fromReplace(e,this.pos,this.pos+1,new k(b.from(r),0,t.isLeaf?0:1))}invert(e){let t=e.nodeAt(this.pos);if(t){let r=this.mark.addToSet(t.marks);if(r.length==t.marks.length){for(let o=0;or.pos?null:new n(t.pos,r.pos,o,i,this.slice,this.insert,this.structure)}toJSON(){let e={stepType:"replaceAround",from:this.from,to:this.to,gapFrom:this.gapFrom,gapTo:this.gapTo,insert:this.insert};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(e,t){if(typeof t.from!="number"||typeof t.to!="number"||typeof t.gapFrom!="number"||typeof t.gapTo!="number"||typeof t.insert!="number")throw new RangeError("Invalid input for ReplaceAroundStep.fromJSON");return new n(t.from,t.to,t.gapFrom,t.gapTo,k.fromJSON(e,t.slice),t.insert,!!t.structure)}};L.jsonID("replaceAround",z);function qr(n,e,t){let r=n.resolve(e),o=t-e,i=r.depth;for(;o>0&&i>0&&r.indexAfter(i)==r.node(i).childCount;)i--,o--;if(o>0){let s=r.node(i).maybeChild(r.indexAfter(i));for(;o>0;){if(!s||s.isLeaf)return!0;s=s.firstChild,o--}}return!1}function Cd(n,e,t,r){let o=[],i=[],s,l;n.doc.nodesBetween(e,t,(a,c,d)=>{if(!a.isInline)return;let f=a.marks;if(!r.isInSet(f)&&d.type.allowsMarkType(r.type)){let u=Math.max(c,e),p=Math.min(c+a.nodeSize,t),h=r.addToSet(f);for(let m=0;mn.step(a)),i.forEach(a=>n.step(a))}function Md(n,e,t,r){let o=[],i=0;n.doc.nodesBetween(e,t,(s,l)=>{if(!s.isInline)return;i++;let a=null;if(r instanceof bt){let c=s.marks,d;for(;d=r.isInSet(c);)(a||(a=[])).push(d),c=d.removeFromSet(c)}else r?r.isInSet(s.marks)&&(a=[r]):a=s.marks;if(a&&a.length){let c=Math.min(l+s.nodeSize,t);for(let d=0;dn.step(new He(s.from,s.to,s.style)))}function Yr(n,e,t,r=t.contentMatch,o=!0){let i=n.doc.nodeAt(e),s=[],l=e+1;for(let a=0;a=0;a--)n.step(s[a])}function Ed(n,e,t){return(e==0||n.canReplace(e,n.childCount))&&(t==n.childCount||n.canReplace(0,t))}function Se(n){let t=n.parent.content.cutByIndex(n.startIndex,n.endIndex);for(let r=n.depth,o=0,i=0;;--r){let s=n.$from.node(r),l=n.$from.index(r)+o,a=n.$to.indexAfter(r)-i;if(rt;h--)m||r.index(h)>0?(m=!0,d=b.from(r.node(h).copy(d)),f++):a--;let u=b.empty,p=0;for(let h=i,m=!1;h>t;h--)m||o.after(h+1)=0;s--){if(r.size){let l=t[s].type.contentMatch.matchFragment(r);if(!l||!l.validEnd)throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper")}r=b.from(t[s].type.create(t[s].attrs,r))}let o=e.start,i=e.end;n.step(new z(o,i,o,i,new k(r,0,0),t.length,!0))}function vd(n,e,t,r,o){if(!r.isTextblock)throw new RangeError("Type given to setBlockType should be a textblock");let i=n.steps.length;n.doc.nodesBetween(e,t,(s,l)=>{let a=typeof o=="function"?o(s):o;if(s.isTextblock&&!s.hasMarkup(r,a)&&Dd(n.doc,n.mapping.slice(i).map(l),r)){let c=null;if(r.schema.linebreakReplacement){let p=r.whitespace=="pre",h=!!r.contentMatch.matchType(r.schema.linebreakReplacement);p&&!h?c=!1:!p&&h&&(c=!0)}c===!1&&zs(n,s,l,i),Yr(n,n.mapping.slice(i).map(l,1),r,void 0,c===null);let d=n.mapping.slice(i),f=d.map(l,1),u=d.map(l+s.nodeSize,1);return n.step(new z(f,u,f+1,u-1,new k(b.from(r.create(a,null,s.marks)),0,0),1,!0)),c===!0&&Bs(n,s,l,i),!1}})}function Bs(n,e,t,r){e.forEach((o,i)=>{if(o.isText){let s,l=/\r?\n|\r/g;for(;s=l.exec(o.text);){let a=n.mapping.slice(r).map(t+1+i+s.index);n.replaceWith(a,a+1,e.type.schema.linebreakReplacement.create())}}})}function zs(n,e,t,r){e.forEach((o,i)=>{if(o.type==o.type.schema.linebreakReplacement){let s=n.mapping.slice(r).map(t+1+i);n.replaceWith(s,s+1,e.type.schema.text(` +`))}})}function Dd(n,e,t){let r=n.resolve(e),o=r.index();return r.parent.canReplaceWith(o,o+1,t)}function Rd(n,e,t,r,o){let i=n.doc.nodeAt(e);if(!i)throw new RangeError("No node at given position");t||(t=i.type);let s=t.create(r,null,o||i.marks);if(i.isLeaf)return n.replaceWith(e,e+i.nodeSize,s);if(!t.validContent(i.content))throw new RangeError("Invalid content for node type "+t.name);n.step(new z(e,e+i.nodeSize,e+1,e+i.nodeSize-1,new k(b.from(s),0,0),1,!0))}function ie(n,e,t=1,r){let o=n.resolve(e),i=o.depth-t,s=r&&r[r.length-1]||o.parent;if(i<0||o.parent.type.spec.isolating||!o.parent.canReplace(o.index(),o.parent.childCount)||!s.type.validContent(o.parent.content.cutByIndex(o.index(),o.parent.childCount)))return!1;for(let c=o.depth-1,d=t-2;c>i;c--,d--){let f=o.node(c),u=o.index(c);if(f.type.spec.isolating)return!1;let p=f.content.cutByIndex(u,f.childCount),h=r&&r[d+1];h&&(p=p.replaceChild(0,h.type.create(h.attrs)));let m=r&&r[d]||f;if(!f.canReplace(u+1,f.childCount)||!m.type.validContent(p))return!1}let l=o.indexAfter(i),a=r&&r[0];return o.node(i).canReplaceWith(l,l,a?a.type:o.node(i+1).type)}function Id(n,e,t=1,r){let o=n.doc.resolve(e),i=b.empty,s=b.empty;for(let l=o.depth,a=o.depth-t,c=t-1;l>a;l--,c--){i=b.from(o.node(l).copy(i));let d=r&&r[c];s=b.from(d?d.type.create(d.attrs,s):o.node(l).copy(s))}n.step(new W(e,e,new k(i.append(s),t,t),!0))}function ae(n,e){let t=n.resolve(e),r=t.index();return Fs(t.nodeBefore,t.nodeAfter)&&t.parent.canReplace(r,r+1)}function _d(n,e){e.content.size||n.type.compatibleContent(e.type);let t=n.contentMatchAt(n.childCount),{linebreakReplacement:r}=n.type.schema;for(let o=0;o0?(i=r.node(o+1),l++,s=r.node(o).maybeChild(l)):(i=r.node(o).maybeChild(l-1),s=r.node(o+1)),i&&!i.isTextblock&&Fs(i,s)&&r.node(o).canReplace(l,l+1))return e;if(o==0)break;e=t<0?r.before(o):r.after(o)}}function Pd(n,e,t){let r=null,{linebreakReplacement:o}=n.doc.type.schema,i=n.doc.resolve(e-t),s=i.node().type;if(o&&s.inlineContent){let d=s.whitespace=="pre",f=!!s.contentMatch.matchType(o);d&&!f?r=!1:!d&&f&&(r=!0)}let l=n.steps.length;if(r===!1){let d=n.doc.resolve(e+t);zs(n,d.node(),d.before(),l)}s.inlineContent&&Yr(n,e+t-1,s,i.node().contentMatchAt(i.index()),r==null);let a=n.mapping.slice(l),c=a.map(e-t);if(n.step(new W(c,a.map(e+t,-1),k.empty,!0)),r===!0){let d=n.doc.resolve(c);Bs(n,d.node(),d.before(),n.steps.length)}return n}function Ls(n,e,t){let r=n.resolve(e);if(r.parent.canReplaceWith(r.index(),r.index(),t))return e;if(r.parentOffset==0)for(let o=r.depth-1;o>=0;o--){let i=r.index(o);if(r.node(o).canReplaceWith(i,i,t))return r.before(o+1);if(i>0)return null}if(r.parentOffset==r.parent.content.size)for(let o=r.depth-1;o>=0;o--){let i=r.indexAfter(o);if(r.node(o).canReplaceWith(i,i,t))return r.after(o+1);if(i=0;s--){let l=s==r.depth?0:r.pos<=(r.start(s+1)+r.end(s+1))/2?-1:1,a=r.index(s)+(l>0?1:0),c=r.node(s),d=!1;if(i==1)d=c.canReplace(a,a,o);else{let f=c.contentMatchAt(a).findWrapping(o.firstChild.type);d=f&&c.canReplaceWith(a,a,f[0])}if(d)return l==0?r.pos:l<0?r.before(s+1):r.after(s+1)}return null}function Mt(n,e,t=e,r=k.empty){if(e==t&&!r.size)return null;let o=n.resolve(e),i=n.resolve(t);return $s(o,i,r)?new W(e,t,r):new Ur(o,i,r).fit()}function $s(n,e,t){return!t.openStart&&!t.openEnd&&n.start()==e.start()&&n.parent.canReplace(n.index(),e.index(),t.content)}var Ur=class{constructor(e,t,r){this.$from=e,this.$to=t,this.unplaced=r,this.frontier=[],this.placed=b.empty;for(let o=0;o<=e.depth;o++){let i=e.node(o);this.frontier.push({type:i.type,match:i.contentMatchAt(e.indexAfter(o))})}for(let o=e.depth;o>0;o--)this.placed=b.from(e.node(o).copy(this.placed))}get depth(){return this.frontier.length-1}fit(){for(;this.unplaced.size;){let c=this.findFittable();c?this.placeNodes(c):this.openMore()||this.dropNode()}let e=this.mustMoveInline(),t=this.placed.size-this.depth-this.$from.depth,r=this.$from,o=this.close(e<0?this.$to:r.doc.resolve(e));if(!o)return null;let i=this.placed,s=r.depth,l=o.depth;for(;s&&l&&i.childCount==1;)i=i.firstChild.content,s--,l--;let a=new k(i,s,l);return e>-1?new z(r.pos,e,this.$to.pos,this.$to.end(),a,t):a.size||r.pos!=this.$to.pos?new W(r.pos,o.pos,a):null}findFittable(){let e=this.unplaced.openStart;for(let t=this.unplaced.content,r=0,o=this.unplaced.openEnd;r1&&(o=0),i.type.spec.isolating&&o<=r){e=r;break}t=i.content}for(let t=1;t<=2;t++)for(let r=t==1?e:this.unplaced.openStart;r>=0;r--){let o,i=null;r?(i=Hr(this.unplaced.content,r-1).firstChild,o=i.content):o=this.unplaced.content;let s=o.firstChild;for(let l=this.depth;l>=0;l--){let{type:a,match:c}=this.frontier[l],d,f=null;if(t==1&&(s?c.matchType(s.type)||(f=c.fillBefore(b.from(s),!1)):i&&a.compatibleContent(i.type)))return{sliceDepth:r,frontierDepth:l,parent:i,inject:f};if(t==2&&s&&(d=c.findWrapping(s.type)))return{sliceDepth:r,frontierDepth:l,parent:i,wrap:d};if(i&&c.matchType(i.type))break}}}openMore(){let{content:e,openStart:t,openEnd:r}=this.unplaced,o=Hr(e,t);return!o.childCount||o.firstChild.isLeaf?!1:(this.unplaced=new k(e,t+1,Math.max(r,o.size+t>=e.size-r?t+1:0)),!0)}dropNode(){let{content:e,openStart:t,openEnd:r}=this.unplaced,o=Hr(e,t);if(o.childCount<=1&&t>0){let i=e.size-t<=t+o.size;this.unplaced=new k(Gt(e,t-1,1),t-1,i?t-1:r)}else this.unplaced=new k(Gt(e,t,1),t,r)}placeNodes({sliceDepth:e,frontierDepth:t,parent:r,inject:o,wrap:i}){for(;this.depth>t;)this.closeFrontierNode();if(i)for(let m=0;m1||a==0||m.content.size)&&(f=g,d.push(Vs(m.mark(u.allowedMarks(m.marks)),c==1?a:0,c==l.childCount?p:-1)))}let h=c==l.childCount;h||(p=-1),this.placed=Yt(this.placed,t,b.from(d)),this.frontier[t].match=f,h&&p<0&&r&&r.type==this.frontier[this.depth].type&&this.frontier.length>1&&this.closeFrontierNode();for(let m=0,g=l;m1&&o==this.$to.end(--r);)++o;return o}findCloseLevel(e){e:for(let t=Math.min(this.depth,e.depth);t>=0;t--){let{match:r,type:o}=this.frontier[t],i=t=0;l--){let{match:a,type:c}=this.frontier[l],d=Jr(e,l,c,a,!0);if(!d||d.childCount)continue e}return{depth:t,fit:s,move:i?e.doc.resolve(e.after(t+1)):e}}}}close(e){let t=this.findCloseLevel(e);if(!t)return null;for(;this.depth>t.depth;)this.closeFrontierNode();t.fit.childCount&&(this.placed=Yt(this.placed,t.depth,t.fit)),e=t.move;for(let r=t.depth+1;r<=e.depth;r++){let o=e.node(r),i=o.type.contentMatch.fillBefore(o.content,!0,e.index(r));this.openFrontierNode(o.type,o.attrs,i)}return e}openFrontierNode(e,t=null,r){let o=this.frontier[this.depth];o.match=o.match.matchType(e),this.placed=Yt(this.placed,this.depth,b.from(e.create(t,r))),this.frontier.push({type:e,match:e.contentMatch})}closeFrontierNode(){let t=this.frontier.pop().match.fillBefore(b.empty,!0);t.childCount&&(this.placed=Yt(this.placed,this.frontier.length,t))}};function Gt(n,e,t){return e==0?n.cutByIndex(t,n.childCount):n.replaceChild(0,n.firstChild.copy(Gt(n.firstChild.content,e-1,t)))}function Yt(n,e,t){return e==0?n.append(t):n.replaceChild(n.childCount-1,n.lastChild.copy(Yt(n.lastChild.content,e-1,t)))}function Hr(n,e){for(let t=0;t1&&(r=r.replaceChild(0,Vs(r.firstChild,e-1,r.childCount==1?t-1:0))),e>0&&(r=n.type.contentMatch.fillBefore(r).append(r),t<=0&&(r=r.append(n.type.contentMatch.matchFragment(r).fillBefore(b.empty,!0)))),n.copy(r)}function Jr(n,e,t,r,o){let i=n.node(e),s=o?n.indexAfter(e):n.index(e);if(s==i.childCount&&!t.compatibleContent(i.type))return null;let l=r.fillBefore(i.content,!0,s);return l&&!Bd(t,i.content,s)?l:null}function Bd(n,e,t){for(let r=t;r0;u--,p--){let h=o.node(u).type.spec;if(h.defining||h.definingAsContext||h.isolating)break;s.indexOf(u)>-1?l=u:o.before(u)==p&&s.splice(1,0,-u)}let a=s.indexOf(l),c=[],d=r.openStart;for(let u=r.content,p=0;;p++){let h=u.firstChild;if(c.push(h),p==r.openStart)break;u=h.content}for(let u=d-1;u>=0;u--){let p=c[u],h=zd(p.type);if(h&&!p.sameMarkup(o.node(Math.abs(l)-1)))d=u;else if(h||!p.type.isTextblock)break}for(let u=r.openStart;u>=0;u--){let p=(u+d+1)%(r.openStart+1),h=c[p];if(h)for(let m=0;m=0&&(n.replace(e,t,r),!(n.steps.length>f));u--){let p=s[u];p<0||(e=o.before(p),t=i.after(p))}}function js(n,e,t,r,o){if(er){let i=o.contentMatchAt(0),s=i.fillBefore(n).append(n);n=s.append(i.matchFragment(s).fillBefore(b.empty,!0))}return n}function Ld(n,e,t,r){if(!r.isInline&&e==t&&n.doc.resolve(e).parent.content.size){let o=Ls(n.doc,e,r.type);o!=null&&(e=t=o)}n.replaceRange(e,t,new k(b.from(r),0,0))}function $d(n,e,t){let r=n.doc.resolve(e),o=n.doc.resolve(t);if(r.parent.isTextblock&&o.parent.isTextblock&&r.start()!=o.start()&&r.parentOffset==0&&o.parentOffset==0){let s=r.sharedDepth(t),l=!1;for(let a=r.depth;a>s;a--)r.node(a).type.spec.isolating&&(l=!0);for(let a=o.depth;a>s;a--)o.node(a).type.spec.isolating&&(l=!0);if(!l){for(let a=r.depth;a>0&&e==r.start(a);a--)e=r.before(a);for(let a=o.depth;a>0&&t==o.start(a);a--)t=o.before(a);r=n.doc.resolve(e),o=n.doc.resolve(t)}}let i=Ws(r,o);for(let s=0;s0&&(a||r.node(l-1).canReplace(r.index(l-1),o.indexAfter(l-1))))return n.delete(r.before(l),o.after(l))}for(let s=1;s<=r.depth&&s<=o.depth;s++)if(e-r.start(s)==r.depth-s&&t>r.end(s)&&o.end(s)-t!=o.depth-s&&r.start(s-1)==o.start(s-1)&&r.node(s-1).canReplace(r.index(s-1),o.index(s-1)))return n.delete(r.before(s),t);n.delete(e,t)}function Ws(n,e){let t=[],r=Math.min(n.depth,e.depth);for(let o=r;o>=0;o--){let i=n.start(o);if(ie.pos+(e.depth-o)||n.node(o).type.spec.isolating||e.node(o).type.spec.isolating)break;(i==e.start(o)||o==n.depth&&o==e.depth&&n.parent.inlineContent&&e.parent.inlineContent&&o&&e.start(o-1)==i-1)&&t.push(o)}return t}var Xt=class n extends L{constructor(e,t,r){super(),this.pos=e,this.attr=t,this.value=r}apply(e){let t=e.nodeAt(this.pos);if(!t)return j.fail("No node at attribute step's position");let r=Object.create(null);for(let i in t.attrs)r[i]=t.attrs[i];r[this.attr]=this.value;let o=t.type.create(r,null,t.marks);return j.fromReplace(e,this.pos,this.pos+1,new k(b.from(o),0,t.isLeaf?0:1))}getMap(){return xe.empty}invert(e){return new n(this.pos,this.attr,e.nodeAt(this.pos).attrs[this.attr])}map(e){let t=e.mapResult(this.pos,1);return t.deletedAfter?null:new n(t.pos,this.attr,this.value)}toJSON(){return{stepType:"attr",pos:this.pos,attr:this.attr,value:this.value}}static fromJSON(e,t){if(typeof t.pos!="number"||typeof t.attr!="string")throw new RangeError("Invalid input for AttrStep.fromJSON");return new n(t.pos,t.attr,t.value)}};L.jsonID("attr",Xt);var Zt=class n extends L{constructor(e,t){super(),this.attr=e,this.value=t}apply(e){let t=Object.create(null);for(let o in e.attrs)t[o]=e.attrs[o];t[this.attr]=this.value;let r=e.type.create(t,e.content,e.marks);return j.ok(r)}getMap(){return xe.empty}invert(e){return new n(this.attr,e.attrs[this.attr])}map(e){return this}toJSON(){return{stepType:"docAttr",attr:this.attr,value:this.value}}static fromJSON(e,t){if(typeof t.attr!="string")throw new RangeError("Invalid input for DocAttrStep.fromJSON");return new n(t.attr,t.value)}};L.jsonID("docAttr",Zt);var rt=class extends Error{};rt=function n(e){let t=Error.call(this,e);return t.__proto__=n.prototype,t};rt.prototype=Object.create(Error.prototype);rt.prototype.constructor=rt;rt.prototype.name="TransformError";var ve=class{constructor(e){this.doc=e,this.steps=[],this.docs=[],this.mapping=new St}get before(){return this.docs.length?this.docs[0]:this.doc}step(e){let t=this.maybeStep(e);if(t.failed)throw new rt(t.failed);return this}maybeStep(e){let t=e.apply(this.doc);return t.failed||this.addStep(e,t.doc),t}get docChanged(){return this.steps.length>0}changedRange(){let e=1e9,t=-1e9;for(let r=0;r{e=Math.min(e,l),t=Math.max(t,a)})}return e==1e9?null:{from:e,to:t}}addStep(e,t){this.docs.push(this.doc),this.steps.push(e),this.mapping.appendMap(e.getMap()),this.doc=t}replace(e,t=e,r=k.empty){let o=Mt(this.doc,e,t,r);return o&&this.step(o),this}replaceWith(e,t,r){return this.replace(e,t,new k(b.from(r),0,0))}delete(e,t){return this.replace(e,t,k.empty)}insert(e,t){return this.replaceWith(e,e,t)}replaceRange(e,t,r){return Fd(this,e,t,r),this}replaceRangeWith(e,t,r){return Ld(this,e,t,r),this}deleteRange(e,t){return $d(this,e,t),this}lift(e,t){return Od(this,e,t),this}join(e,t=1){return Pd(this,e,t),this}wrap(e,t){return Ad(this,e,t),this}setBlockType(e,t=e,r,o=null){return vd(this,e,t,r,o),this}setNodeMarkup(e,t,r=null,o){return Rd(this,e,t,r,o),this}setNodeAttribute(e,t,r){return this.step(new Xt(e,t,r)),this}setDocAttribute(e,t){return this.step(new Zt(e,t)),this}addNodeMark(e,t){return this.step(new Ct(e,t)),this}removeNodeMark(e,t){let r=this.doc.nodeAt(e);if(!r)throw new RangeError("No node at position "+e);if(t instanceof R)t.isInSet(r.marks)&&this.step(new nt(e,t));else{let o=r.marks,i,s=[];for(;i=t.isInSet(o);)s.push(new nt(e,i)),o=i.removeFromSet(o);for(let l=s.length-1;l>=0;l--)this.step(s[l])}return this}split(e,t=1,r){return Id(this,e,t,r),this}addMark(e,t,r){return Cd(this,e,t,r),this}removeMark(e,t,r){return Md(this,e,t,r),this}clearIncompatible(e,t,r){return Yr(this,e,t,r),this}};var Xr=Object.create(null),C=class{constructor(e,t,r){this.$anchor=e,this.$head=t,this.ranges=r||[new De(e.min(t),e.max(t))]}get anchor(){return this.$anchor.pos}get head(){return this.$head.pos}get from(){return this.$from.pos}get to(){return this.$to.pos}get $from(){return this.ranges[0].$from}get $to(){return this.ranges[0].$to}get empty(){let e=this.ranges;for(let t=0;t=0;i--){let s=t<0?Et(e.node(0),e.node(i),e.before(i+1),e.index(i),t,r):Et(e.node(0),e.node(i),e.after(i+1),e.index(i)+1,t,r);if(s)return s}return null}static near(e,t=1){return this.findFrom(e,t)||this.findFrom(e,-t)||new Z(e.node(0))}static atStart(e){return Et(e,e,0,0,1)||new Z(e)}static atEnd(e){return Et(e,e,e.content.size,e.childCount,-1)||new Z(e)}static fromJSON(e,t){if(!t||!t.type)throw new RangeError("Invalid input for Selection.fromJSON");let r=Xr[t.type];if(!r)throw new RangeError(`No selection type ${t.type} defined`);return r.fromJSON(e,t)}static jsonID(e,t){if(e in Xr)throw new RangeError("Duplicate use of selection JSON ID "+e);return Xr[e]=t,t.prototype.jsonID=e,t}getBookmark(){return O.between(this.$anchor,this.$head).getBookmark()}};C.prototype.visible=!0;var De=class{constructor(e,t){this.$from=e,this.$to=t}},Ks=!1;function Hs(n){!Ks&&!n.parent.inlineContent&&(Ks=!0,console.warn("TextSelection endpoint not pointing into a node with inline content ("+n.parent.type.name+")"))}var O=class n extends C{constructor(e,t=e){Hs(e),Hs(t),super(e,t)}get $cursor(){return this.$anchor.pos==this.$head.pos?this.$head:null}map(e,t){let r=e.resolve(t.map(this.head));if(!r.parent.inlineContent)return C.near(r);let o=e.resolve(t.map(this.anchor));return new n(o.parent.inlineContent?o:r,r)}replace(e,t=k.empty){if(super.replace(e,t),t==k.empty){let r=this.$from.marksAcross(this.$to);r&&e.ensureMarks(r)}}eq(e){return e instanceof n&&e.anchor==this.anchor&&e.head==this.head}getBookmark(){return new Pn(this.anchor,this.head)}toJSON(){return{type:"text",anchor:this.anchor,head:this.head}}static fromJSON(e,t){if(typeof t.anchor!="number"||typeof t.head!="number")throw new RangeError("Invalid input for TextSelection.fromJSON");return new n(e.resolve(t.anchor),e.resolve(t.head))}static create(e,t,r=t){let o=e.resolve(t);return new this(o,r==t?o:e.resolve(r))}static between(e,t,r){let o=e.pos-t.pos;if((!r||o)&&(r=o>=0?1:-1),!t.parent.inlineContent){let i=C.findFrom(t,r,!0)||C.findFrom(t,-r,!0);if(i)t=i.$head;else return C.near(t,r)}return e.parent.inlineContent||(o==0?e=t:(e=(C.findFrom(e,-r,!0)||C.findFrom(e,r,!0)).$anchor,e.pos0?0:1);o>0?s=0;s+=o){let l=e.child(s);if(l.isAtom){if(!i&&w.isSelectable(l))return w.create(n,t-(o<0?l.nodeSize:0))}else{let a=Et(n,l,t+o,o<0?l.childCount:0,o,i);if(a)return a}t+=l.nodeSize*o}return null}function Js(n,e,t){let r=n.steps.length-1;if(r{s==null&&(s=d)}),n.setSelection(C.near(n.doc.resolve(s),t))}var qs=1,_n=2,Us=4,Bn=class extends ve{constructor(e){super(e.doc),this.curSelectionFor=0,this.updated=0,this.meta=Object.create(null),this.time=Date.now(),this.curSelection=e.selection,this.storedMarks=e.storedMarks}get selection(){return this.curSelectionFor0}setStoredMarks(e){return this.storedMarks=e,this.updated|=_n,this}ensureMarks(e){return R.sameSet(this.storedMarks||this.selection.$from.marks(),e)||this.setStoredMarks(e),this}addStoredMark(e){return this.ensureMarks(e.addToSet(this.storedMarks||this.selection.$head.marks()))}removeStoredMark(e){return this.ensureMarks(e.removeFromSet(this.storedMarks||this.selection.$head.marks()))}get storedMarksSet(){return(this.updated&_n)>0}addStep(e,t){super.addStep(e,t),this.updated=this.updated&~_n,this.storedMarks=null}setTime(e){return this.time=e,this}replaceSelection(e){return this.selection.replace(this,e),this}replaceSelectionWith(e,t=!0){let r=this.selection;return t&&(e=e.mark(this.storedMarks||(r.empty?r.$from.marks():r.$from.marksAcross(r.$to)||R.none))),r.replaceWith(this,e),this}deleteSelection(){return this.selection.replace(this),this}insertText(e,t,r){let o=this.doc.type.schema;if(t==null)return e?this.replaceSelectionWith(o.text(e),!0):this.deleteSelection();{if(r==null&&(r=t),!e)return this.deleteRange(t,r);let i=this.storedMarks;if(!i){let s=this.doc.resolve(t);i=r==t?s.marks():s.marksAcross(this.doc.resolve(r))}return this.replaceRangeWith(t,r,o.text(e,i)),!this.selection.empty&&this.selection.to==t+e.length&&this.setSelection(C.near(this.selection.$to)),this}}setMeta(e,t){return this.meta[typeof e=="string"?e:e.key]=t,this}getMeta(e){return this.meta[typeof e=="string"?e:e.key]}get isGeneric(){for(let e in this.meta)return!1;return!0}scrollIntoView(){return this.updated|=Us,this}get scrolledIntoView(){return(this.updated&Us)>0}};function Gs(n,e){return!e||!n?n:n.bind(e)}var st=class{constructor(e,t,r){this.name=e,this.init=Gs(t.init,r),this.apply=Gs(t.apply,r)}},jd=[new st("doc",{init(n){return n.doc||n.schema.topNodeType.createAndFill()},apply(n){return n.doc}}),new st("selection",{init(n,e){return n.selection||C.atStart(e.doc)},apply(n){return n.selection}}),new st("storedMarks",{init(n){return n.storedMarks||null},apply(n,e,t,r){return r.selection.$cursor?n.storedMarks:null}}),new st("scrollToSelection",{init(){return 0},apply(n,e){return n.scrolledIntoView?e+1:e}})],en=class{constructor(e,t){this.schema=e,this.plugins=[],this.pluginsByKey=Object.create(null),this.fields=jd.slice(),t&&t.forEach(r=>{if(this.pluginsByKey[r.key])throw new RangeError("Adding different instances of a keyed plugin ("+r.key+")");this.plugins.push(r),this.pluginsByKey[r.key]=r,r.spec.state&&this.fields.push(new st(r.key,r.spec.state,r))})}},tn=class n{constructor(e){this.config=e}get schema(){return this.config.schema}get plugins(){return this.config.plugins}apply(e){return this.applyTransaction(e).state}filterTransaction(e,t=-1){for(let r=0;rr.toJSON())),e&&typeof e=="object")for(let r in e){if(r=="doc"||r=="selection")throw new RangeError("The JSON fields `doc` and `selection` are reserved");let o=e[r],i=o.spec.state;i&&i.toJSON&&(t[r]=i.toJSON.call(o,this[o.key]))}return t}static fromJSON(e,t,r){if(!t)throw new RangeError("Invalid input for EditorState.fromJSON");if(!e.schema)throw new RangeError("Required config field 'schema' missing");let o=new en(e.schema,e.plugins),i=new n(o);return o.fields.forEach(s=>{if(s.name=="doc")i.doc=te.fromJSON(e.schema,t.doc);else if(s.name=="selection")i.selection=C.fromJSON(i.doc,t.selection);else if(s.name=="storedMarks")t.storedMarks&&(i.storedMarks=t.storedMarks.map(e.schema.markFromJSON));else{if(r)for(let l in r){let a=r[l],c=a.spec.state;if(a.key==s.name&&c&&c.fromJSON&&Object.prototype.hasOwnProperty.call(t,l)){i[s.name]=c.fromJSON.call(a,e,t[l],i);return}}i[s.name]=s.init(e,i)}}),i}};function Ys(n,e,t){for(let r in n){let o=n[r];o instanceof Function?o=o.bind(e):r=="handleDOMEvents"&&(o=Ys(o,e,{})),t[r]=o}return t}var B=class{constructor(e){this.spec=e,this.props={},e.props&&Ys(e.props,this,this.props),this.key=e.key?e.key.key:Xs("plugin")}getState(e){return e[this.key]}},Zr=Object.create(null);function Xs(n){return n in Zr?n+"$"+ ++Zr[n]:(Zr[n]=0,n+"$")}var K=class{constructor(e="key"){this.key=Xs(e)}get(e){return e.config.pluginsByKey[this.key]}getState(e){return e[this.key]}};var _o={};ce(_o,{Decoration:()=>oe,DecorationSet:()=>$,EditorView:()=>It,__endComposition:()=>bu,__parseFromClipboard:()=>yu});var H=function(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e},vt=function(n){let e=n.assignedSlot||n.parentNode;return e&&e.nodeType==11?e.host:e},so=null,Ie=function(n,e,t){let r=so||(so=document.createRange());return r.setEnd(n,t??n.nodeValue.length),r.setStart(n,e||0),r},Wd=function(){so=null},pt=function(n,e,t,r){return t&&(Zs(n,e,t,r,-1)||Zs(n,e,t,r,1))},Kd=/^(img|br|input|textarea|hr)$/i;function Zs(n,e,t,r,o){for(var i;;){if(n==t&&e==r)return!0;if(e==(o<0?0:fe(n))){let s=n.parentNode;if(!s||s.nodeType!=1||dn(n)||Kd.test(n.nodeName)||n.contentEditable=="false")return!1;e=H(n)+(o<0?0:1),n=s}else if(n.nodeType==1){let s=n.childNodes[e+(o<0?-1:0)];if(s.nodeType==1&&s.contentEditable=="false")if(!((i=s.pmViewDesc)===null||i===void 0)&&i.ignoreForSelection)e+=o;else return!1;else n=s,e=o<0?fe(n):0}else return!1}}function fe(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Hd(n,e){for(;;){if(n.nodeType==3&&e)return n;if(n.nodeType==1&&e>0){if(n.contentEditable=="false")return null;n=n.childNodes[e-1],e=fe(n)}else if(n.parentNode&&!dn(n))e=H(n),n=n.parentNode;else return null}}function Jd(n,e){for(;;){if(n.nodeType==3&&e2),de=Dt||(we?/Mac/.test(we.platform):!1),Il=we?/Win/.test(we.platform):!1,_e=/Android \d/.test(Xe),fn=!!Qs&&"webkitFontSmoothing"in Qs.documentElement.style,Yd=fn?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0;function Xd(n){let e=n.defaultView&&n.defaultView.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.documentElement.clientWidth,top:0,bottom:n.documentElement.clientHeight}}function Re(n,e){return typeof n=="number"?n:n[e]}function Zd(n){let e=n.getBoundingClientRect(),t=e.width/n.offsetWidth||1,r=e.height/n.offsetHeight||1;return{left:e.left,right:e.left+n.clientWidth*t,top:e.top,bottom:e.top+n.clientHeight*r}}function el(n,e,t){let r=n.someProp("scrollThreshold")||0,o=n.someProp("scrollMargin")||5,i=n.dom.ownerDocument;for(let s=t||n.dom;s;){if(s.nodeType!=1){s=vt(s);continue}let l=s,a=l==i.body,c=a?Xd(i):Zd(l),d=0,f=0;if(e.topc.bottom-Re(r,"bottom")&&(f=e.bottom-e.top>c.bottom-c.top?e.top+Re(o,"top")-c.top:e.bottom-c.bottom+Re(o,"bottom")),e.leftc.right-Re(r,"right")&&(d=e.right-c.right+Re(o,"right")),d||f)if(a)i.defaultView.scrollBy(d,f);else{let p=l.scrollLeft,h=l.scrollTop;f&&(l.scrollTop+=f),d&&(l.scrollLeft+=d);let m=l.scrollLeft-p,g=l.scrollTop-h;e={left:e.left-m,top:e.top-g,right:e.right-m,bottom:e.bottom-g}}let u=a?"fixed":getComputedStyle(s).position;if(/^(fixed|sticky)$/.test(u))break;s=u=="absolute"?s.offsetParent:vt(s)}}function Qd(n){let e=n.dom.getBoundingClientRect(),t=Math.max(0,e.top),r,o;for(let i=(e.left+e.right)/2,s=t+1;s=t-20){r=l,o=a.top;break}}return{refDOM:r,refTop:o,stack:_l(n.dom)}}function _l(n){let e=[],t=n.ownerDocument;for(let r=n;r&&(e.push({dom:r,top:r.scrollTop,left:r.scrollLeft}),n!=t);r=vt(r));return e}function ef({refDOM:n,refTop:e,stack:t}){let r=n?n.getBoundingClientRect().top:0;Pl(t,r==0?0:r-e)}function Pl(n,e){for(let t=0;t=l){s=Math.max(h.bottom,s),l=Math.min(h.top,l);let m=h.left>e.left?h.left-e.left:h.right=(h.left+h.right)/2?1:0));continue}}else h.top>e.top&&!a&&h.left<=e.left&&h.right>=e.left&&(a=d,c={left:Math.max(h.left,Math.min(h.right,e.left)),top:h.top});!t&&(e.left>=h.right&&e.top>=h.top||e.left>=h.left&&e.top>=h.bottom)&&(i=f+1)}}return!t&&a&&(t=a,o=c,r=0),t&&t.nodeType==3?nf(t,o):!t||r&&t.nodeType==1?{node:n,offset:i}:Bl(t,o)}function nf(n,e){let t=n.nodeValue.length,r=document.createRange(),o;for(let i=0;i=(s.left+s.right)/2?1:0)};break}}return r.detach(),o||{node:n,offset:0}}function Eo(n,e){return n.left>=e.left-1&&n.left<=e.right+1&&n.top>=e.top-1&&n.top<=e.bottom+1}function rf(n,e){let t=n.parentNode;return t&&/^li$/i.test(t.nodeName)&&e.left(s.left+s.right)/2?1:-1}return n.docView.posFromDOM(r,o,i)}function sf(n,e,t,r){let o=-1;for(let i=e,s=!1;i!=n.dom;){let l=n.docView.nearestDesc(i,!0),a;if(!l)return null;if(l.dom.nodeType==1&&(l.node.isBlock&&l.parent||!l.contentDOM)&&((a=l.dom.getBoundingClientRect()).width||a.height)&&(l.node.isBlock&&l.parent&&!/^T(R|BODY|HEAD|FOOT)$/.test(l.dom.nodeName)&&(!s&&a.left>r.left||a.top>r.top?o=l.posBefore:(!s&&a.right-1?o:n.docView.posFromDOM(e,t,-1)}function zl(n,e,t){let r=n.childNodes.length;if(r&&t.tope.top&&o++}let c;fn&&o&&r.nodeType==1&&(c=r.childNodes[o-1]).nodeType==1&&c.contentEditable=="false"&&c.getBoundingClientRect().top>=e.top&&o--,r==n.dom&&o==r.childNodes.length-1&&r.lastChild.nodeType==1&&e.top>r.lastChild.getBoundingClientRect().bottom?l=n.state.doc.content.size:(o==0||r.nodeType!=1||r.childNodes[o-1].nodeName!="BR")&&(l=sf(n,r,o,e))}l==null&&(l=of(n,s,e));let a=n.docView.nearestDesc(s,!0);return{pos:l,inside:a?a.posAtStart-a.border:-1}}function tl(n){return n.top=0&&o==r.nodeValue.length?(a--,d=1):t<0?a--:c++,nn(Je(Ie(r,a,c),d),d<0)}if(!n.state.doc.resolve(e-(i||0)).parent.inlineContent){if(i==null&&o&&(t<0||o==fe(r))){let a=r.childNodes[o-1];if(a.nodeType==1)return to(a.getBoundingClientRect(),!1)}if(i==null&&o=0)}if(i==null&&o&&(t<0||o==fe(r))){let a=r.childNodes[o-1],c=a.nodeType==3?Ie(a,fe(a)-(s?0:1)):a.nodeType==1&&(a.nodeName!="BR"||!a.nextSibling)?a:null;if(c)return nn(Je(c,1),!1)}if(i==null&&o=0)}function nn(n,e){if(n.width==0)return n;let t=e?n.left:n.right;return{top:n.top,bottom:n.bottom,left:t,right:t}}function to(n,e){if(n.height==0)return n;let t=e?n.top:n.bottom;return{top:t,bottom:t,left:n.left,right:n.right}}function Ll(n,e,t){let r=n.state,o=n.root.activeElement;r!=e&&n.updateState(e),o!=n.dom&&n.focus();try{return t()}finally{r!=e&&n.updateState(r),o!=n.dom&&o&&o.focus()}}function cf(n,e,t){let r=e.selection,o=t=="up"?r.$from:r.$to;return Ll(n,e,()=>{let{node:i}=n.docView.domFromPos(o.pos,t=="up"?-1:1);for(;;){let l=n.docView.nearestDesc(i,!0);if(!l)break;if(l.node.isBlock){i=l.contentDOM||l.dom;break}i=l.dom.parentNode}let s=Fl(n,o.pos,1);for(let l=i.firstChild;l;l=l.nextSibling){let a;if(l.nodeType==1)a=l.getClientRects();else if(l.nodeType==3)a=Ie(l,0,l.nodeValue.length).getClientRects();else continue;for(let c=0;cd.top+1&&(t=="up"?s.top-d.top>(d.bottom-s.top)*2:d.bottom-s.bottom>(s.bottom-d.top)*2))return!1}}return!0})}var df=/[\u0590-\u08ac]/;function ff(n,e,t){let{$head:r}=e.selection;if(!r.parent.isTextblock)return!1;let o=r.parentOffset,i=!o,s=o==r.parent.content.size,l=n.domSelection();return l?!df.test(r.parent.textContent)||!l.modify?t=="left"||t=="backward"?i:s:Ll(n,e,()=>{let{focusNode:a,focusOffset:c,anchorNode:d,anchorOffset:f}=n.domSelectionRange(),u=l.caretBidiLevel;l.modify("move",t,"character");let p=r.depth?n.docView.domAfterPos(r.before()):n.dom,{focusNode:h,focusOffset:m}=n.domSelectionRange(),g=h&&!p.contains(h.nodeType==1?h:h.parentNode)||a==h&&c==m;try{l.collapse(d,f),a&&(a!=d||c!=f)&&l.extend&&l.extend(a,c)}catch{}return u!=null&&(l.caretBidiLevel=u),g}):r.pos==r.start()||r.pos==r.end()}var nl=null,rl=null,ol=!1;function uf(n,e,t){return nl==e&&rl==t?ol:(nl=e,rl=t,ol=t=="up"||t=="down"?cf(n,e,t):ff(n,e,t))}var pe=0,il=1,at=2,Ce=3,ht=class{constructor(e,t,r,o){this.parent=e,this.children=t,this.dom=r,this.contentDOM=o,this.dirty=pe,r.pmViewDesc=this}matchesWidget(e){return!1}matchesMark(e){return!1}matchesNode(e,t,r){return!1}matchesHack(e){return!1}parseRule(){return null}stopEvent(e){return!1}get size(){let e=0;for(let t=0;tH(this.contentDOM);else if(this.contentDOM&&this.contentDOM!=this.dom&&this.dom.contains(this.contentDOM))o=e.compareDocumentPosition(this.contentDOM)&2;else if(this.dom.firstChild){if(t==0)for(let i=e;;i=i.parentNode){if(i==this.dom){o=!1;break}if(i.previousSibling)break}if(o==null&&t==e.childNodes.length)for(let i=e;;i=i.parentNode){if(i==this.dom){o=!0;break}if(i.nextSibling)break}}return o??r>0?this.posAtEnd:this.posAtStart}nearestDesc(e,t=!1){for(let r=!0,o=e;o;o=o.parentNode){let i=this.getDesc(o),s;if(i&&(!t||i.node))if(r&&(s=i.nodeDOM)&&!(s.nodeType==1?s.contains(e.nodeType==1?e:e.parentNode):s==e))r=!1;else return i}}getDesc(e){let t=e.pmViewDesc;for(let r=t;r;r=r.parent)if(r==this)return t}posFromDOM(e,t,r){for(let o=e;o;o=o.parentNode){let i=this.getDesc(o);if(i)return i.localPosFromDOM(e,t,r)}return-1}descAt(e){for(let t=0,r=0;te||s instanceof Ln){o=e-i;break}i=l}if(o)return this.children[r].domFromPos(o-this.children[r].border,t);for(let i;r&&!(i=this.children[r-1]).size&&i instanceof zn&&i.side>=0;r--);if(t<=0){let i,s=!0;for(;i=r?this.children[r-1]:null,!(!i||i.dom.parentNode==this.contentDOM);r--,s=!1);return i&&t&&s&&!i.border&&!i.domAtom?i.domFromPos(i.size,t):{node:this.contentDOM,offset:i?H(i.dom)+1:0}}else{let i,s=!0;for(;i=r=d&&t<=c-a.border&&a.node&&a.contentDOM&&this.contentDOM.contains(a.contentDOM))return a.parseRange(e,t,d);e=s;for(let f=l;f>0;f--){let u=this.children[f-1];if(u.size&&u.dom.parentNode==this.contentDOM&&!u.emptyChildAt(1)){o=H(u.dom)+1;break}e-=u.size}o==-1&&(o=0)}if(o>-1&&(c>t||l==this.children.length-1)){t=c;for(let d=l+1;dh&&st){let h=l;l=a,a=h}let p=document.createRange();p.setEnd(a.node,a.offset),p.setStart(l.node,l.offset),c.removeAllRanges(),c.addRange(p)}}ignoreMutation(e){return!this.contentDOM&&e.type!="selection"}get contentLost(){return this.contentDOM&&this.contentDOM!=this.dom&&!this.dom.contains(this.contentDOM)}markDirty(e,t){for(let r=0,o=0;o=r:er){let l=r+i.border,a=s-i.border;if(e>=l&&t<=a){this.dirty=e==r||t==s?at:il,e==l&&t==a&&(i.contentLost||i.dom.parentNode!=this.contentDOM)?i.dirty=Ce:i.markDirty(e-l,t-l);return}else i.dirty=i.dom==i.contentDOM&&i.dom.parentNode==this.contentDOM&&!i.children.length?at:Ce}r=s}this.dirty=at}markParentsDirty(){let e=1;for(let t=this.parent;t;t=t.parent,e++){let r=e==1?at:il;t.dirty{if(!i)return o;if(i.parent)return i.parent.posBeforeChild(i)})),!t.type.spec.raw){if(s.nodeType!=1){let l=document.createElement("span");l.appendChild(s),s=l}s.contentEditable="false",s.classList.add("ProseMirror-widget")}super(e,[],s,null),this.widget=t,this.widget=t,i=this}matchesWidget(e){return this.dirty==pe&&e.type.eq(this.widget.type)}parseRule(){return{ignore:!0}}stopEvent(e){let t=this.widget.spec.stopEvent;return t?t(e):!1}ignoreMutation(e){return e.type!="selection"||this.widget.spec.ignoreSelection}destroy(){this.widget.type.destroy(this.dom),super.destroy()}get domAtom(){return!0}get ignoreForSelection(){return!!this.widget.type.spec.relaxedSide}get side(){return this.widget.type.side}},fo=class extends ht{constructor(e,t,r,o){super(e,[],t,null),this.textDOM=r,this.text=o}get size(){return this.text.length}localPosFromDOM(e,t){return e!=this.textDOM?this.posAtStart+(t?this.size:0):this.posAtStart+t}domFromPos(e){return{node:this.textDOM,offset:e}}ignoreMutation(e){return e.type==="characterData"&&e.target.nodeValue==e.oldValue}},Rt=class n extends ht{constructor(e,t,r,o,i){super(e,[],r,o),this.mark=t,this.spec=i}static create(e,t,r,o){let i=o.nodeViews[t.type.name],s=i&&i(t,o,r);return(!s||!s.dom)&&(s=ke.renderSpec(document,t.type.spec.toDOM(t,r),null,t.attrs)),new n(e,t,s.dom,s.contentDOM||s.dom,s)}parseRule(){return this.dirty&Ce||this.mark.type.spec.reparseInView?null:{mark:this.mark.type.name,attrs:this.mark.attrs,contentElement:this.contentDOM}}matchesMark(e){return this.dirty!=Ce&&this.mark.eq(e)}markDirty(e,t){if(super.markDirty(e,t),this.dirty!=pe){let r=this.parent;for(;!r.node;)r=r.parent;r.dirty0&&(i=mo(i,0,e,r));for(let l=0;l{if(!a)return s;if(a.parent)return a.parent.posBeforeChild(a)},r,o),d=c&&c.dom,f=c&&c.contentDOM;if(t.isText){if(!d)d=document.createTextNode(t.text);else if(d.nodeType!=3)throw new RangeError("Text must be rendered as a DOM text node")}else d||({dom:d,contentDOM:f}=ke.renderSpec(document,t.type.spec.toDOM(t),null,t.attrs));!f&&!t.isText&&d.nodeName!="BR"&&(d.hasAttribute("contenteditable")||(d.contentEditable="false"),t.type.spec.draggable&&(d.draggable=!0));let u=d;return d=jl(d,r,t),c?a=new uo(e,t,r,o,d,f||null,u,c,i,s+1):t.isText?new Fn(e,t,r,o,d,u,i):new n(e,t,r,o,d,f||null,u,i,s+1)}parseRule(){if(this.node.type.spec.reparseInView)return null;let e={node:this.node.type.name,attrs:this.node.attrs};if(this.node.type.whitespace=="pre"&&(e.preserveWhitespace="full"),!this.contentDOM)e.getContent=()=>this.node.content;else if(!this.contentLost)e.contentElement=this.contentDOM;else{for(let t=this.children.length-1;t>=0;t--){let r=this.children[t];if(this.dom.contains(r.dom.parentNode)){e.contentElement=r.dom.parentNode;break}}e.contentElement||(e.getContent=()=>b.empty)}return e}matchesNode(e,t,r){return this.dirty==pe&&e.eq(this.node)&&$n(t,this.outerDeco)&&r.eq(this.innerDeco)}get size(){return this.node.nodeSize}get border(){return this.node.isLeaf?0:1}updateChildren(e,t){let r=this.node.inlineContent,o=t,i=e.composing?this.localCompositionInfo(e,t):null,s=i&&i.pos>-1?i:null,l=i&&i.pos<0,a=new ho(this,s&&s.node,e);gf(this.node,this.innerDeco,(c,d,f)=>{c.spec.marks?a.syncToMarks(c.spec.marks,r,e,d):c.type.side>=0&&!f&&a.syncToMarks(d==this.node.childCount?R.none:this.node.child(d).marks,r,e,d),a.placeWidget(c,e,o)},(c,d,f,u)=>{a.syncToMarks(c.marks,r,e,u);let p;a.findNodeMatch(c,d,f,u)||l&&e.state.selection.from>o&&e.state.selection.to-1&&a.updateNodeAt(c,d,f,p,e)||a.updateNextNode(c,d,f,e,u,o)||a.addNode(c,d,f,e,o),o+=c.nodeSize}),a.syncToMarks([],r,e,0),this.node.isTextblock&&a.addTextblockHacks(),a.destroyRest(),(a.changed||this.dirty==at)&&(s&&this.protectLocalComposition(e,s),$l(this.contentDOM,this.children,e),Dt&&yf(this.dom))}localCompositionInfo(e,t){let{from:r,to:o}=e.state.selection;if(!(e.state.selection instanceof O)||rt+this.node.content.size)return null;let i=e.input.compositionNode;if(!i||!this.dom.contains(i.parentNode))return null;if(this.node.inlineContent){let s=i.nodeValue,l=bf(this.node.content,s,r-t,o-t);return l<0?null:{node:i,pos:l,text:s}}else return{node:i,pos:-1,text:""}}protectLocalComposition(e,{node:t,pos:r,text:o}){if(this.getDesc(t))return;let i=t;for(;i.parentNode!=this.contentDOM;i=i.parentNode){for(;i.previousSibling;)i.parentNode.removeChild(i.previousSibling);for(;i.nextSibling;)i.parentNode.removeChild(i.nextSibling);i.pmViewDesc&&(i.pmViewDesc=void 0)}let s=new fo(this,i,t,o);e.input.compositionNodes.push(s),this.children=mo(this.children,r,r+o.length,e,s)}update(e,t,r,o){return this.dirty==Ce||!e.sameMarkup(this.node)?!1:(this.updateInner(e,t,r,o),!0)}updateInner(e,t,r,o){this.updateOuterDeco(t),this.node=e,this.innerDeco=r,this.contentDOM&&this.updateChildren(o,this.posAtStart),this.dirty=pe}updateOuterDeco(e){if($n(e,this.outerDeco))return;let t=this.nodeDOM.nodeType!=1,r=this.dom;this.dom=Vl(this.dom,this.nodeDOM,po(this.outerDeco,this.node,t),po(e,this.node,t)),this.dom!=r&&(r.pmViewDesc=void 0,this.dom.pmViewDesc=this),this.outerDeco=e}selectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.add("ProseMirror-selectednode"),(this.contentDOM||!this.node.type.spec.draggable)&&(this.nodeDOM.draggable=!0))}deselectNode(){this.nodeDOM.nodeType==1&&(this.nodeDOM.classList.remove("ProseMirror-selectednode"),(this.contentDOM||!this.node.type.spec.draggable)&&this.nodeDOM.removeAttribute("draggable"))}get domAtom(){return this.node.isAtom}};function sl(n,e,t,r,o){jl(r,e,n);let i=new Ye(void 0,n,e,t,r,r,r,o,0);return i.contentDOM&&i.updateChildren(o,0),i}var Fn=class n extends Ye{constructor(e,t,r,o,i,s,l){super(e,t,r,o,i,null,s,l,0)}parseRule(){let e=this.nodeDOM.parentNode;for(;e&&e!=this.dom&&!e.pmIsDeco;)e=e.parentNode;return{skip:e||!0}}update(e,t,r,o){return this.dirty==Ce||this.dirty!=pe&&!this.inParent()||!e.sameMarkup(this.node)?!1:(this.updateOuterDeco(t),(this.dirty!=pe||e.text!=this.node.text)&&e.text!=this.nodeDOM.nodeValue&&(this.nodeDOM.nodeValue=e.text,o.trackWrites==this.nodeDOM&&(o.trackWrites=null)),this.node=e,this.dirty=pe,!0)}inParent(){let e=this.parent.contentDOM;for(let t=this.nodeDOM;t;t=t.parentNode)if(t==e)return!0;return!1}domFromPos(e){return{node:this.nodeDOM,offset:e}}localPosFromDOM(e,t,r){return e==this.nodeDOM?this.posAtStart+Math.min(t,this.node.text.length):super.localPosFromDOM(e,t,r)}ignoreMutation(e){return e.type!="characterData"&&e.type!="selection"}slice(e,t,r){let o=this.node.cut(e,t),i=document.createTextNode(o.text);return new n(this.parent,o,this.outerDeco,this.innerDeco,i,i,r)}markDirty(e,t){super.markDirty(e,t),this.dom!=this.nodeDOM&&(e==0||t==this.nodeDOM.nodeValue.length)&&(this.dirty=Ce)}get domAtom(){return!1}isText(e){return this.node.text==e}},Ln=class extends ht{parseRule(){return{ignore:!0}}matchesHack(e){return this.dirty==pe&&this.dom.nodeName==e}get domAtom(){return!0}get ignoreForCoords(){return this.dom.nodeName=="IMG"}},uo=class extends Ye{constructor(e,t,r,o,i,s,l,a,c,d){super(e,t,r,o,i,s,l,c,d),this.spec=a}update(e,t,r,o){if(this.dirty==Ce)return!1;if(this.spec.update&&(this.node.type==e.type||this.spec.multiType)){let i=this.spec.update(e,t,r);return i&&this.updateInner(e,t,r,o),i}else return!this.contentDOM&&!e.isLeaf?!1:super.update(e,t,r,o)}selectNode(){this.spec.selectNode?this.spec.selectNode():super.selectNode()}deselectNode(){this.spec.deselectNode?this.spec.deselectNode():super.deselectNode()}setSelection(e,t,r,o){this.spec.setSelection?this.spec.setSelection(e,t,r.root):super.setSelection(e,t,r,o)}destroy(){this.spec.destroy&&this.spec.destroy(),super.destroy()}stopEvent(e){return this.spec.stopEvent?this.spec.stopEvent(e):!1}ignoreMutation(e){return this.spec.ignoreMutation?this.spec.ignoreMutation(e):super.ignoreMutation(e)}};function $l(n,e,t){let r=n.firstChild,o=!1;for(let i=0;i>1,l=Math.min(s,e.length);for(;i-1)a>this.index&&(this.changed=!0,this.destroyBetween(this.index,a)),this.top=this.top.children[this.index];else{let d=Rt.create(this.top,e[s],t,r);this.top.children.splice(this.index,0,d),this.top=d,this.changed=!0}this.index=0,s++}}findNodeMatch(e,t,r,o){let i=-1,s;if(o>=this.preMatch.index&&(s=this.preMatch.matches[o-this.preMatch.index]).parent==this.top&&s.matchesNode(e,t,r))i=this.top.children.indexOf(s,this.index);else for(let l=this.index,a=Math.min(this.top.children.length,l+5);l0;){let l;for(;;)if(r){let c=t.children[r-1];if(c instanceof Rt)t=c,r=c.children.length;else{l=c,r--;break}}else{if(t==e)break e;r=t.parent.children.indexOf(t),t=t.parent}let a=l.node;if(a){if(a!=n.child(o-1))break;--o,i.set(l,o),s.push(l)}}return{index:o,matched:i,matches:s.reverse()}}function mf(n,e){return n.type.side-e.type.side}function gf(n,e,t,r){let o=e.locals(n),i=0;if(o.length==0){for(let c=0;ci;)l.push(o[s++]);let h=i+u.nodeSize;if(u.isText){let g=h;s!g.inline):l.slice();r(u,m,e.forChild(i,u),p),i=h}}function yf(n){if(n.nodeName=="UL"||n.nodeName=="OL"){let e=n.style.cssText;n.style.cssText=e+"; list-style: square !important",window.getComputedStyle(n).listStyle,n.style.cssText=e}}function bf(n,e,t,r){for(let o=0,i=0;o=t){if(i>=r&&a.slice(r-e.length-l,r-l)==e)return r-e.length;let c=l=0&&c+e.length+l>=t)return l+c;if(t==r&&a.length>=r+e.length-l&&a.slice(r-l,r-l+e.length)==e)return r}}return-1}function mo(n,e,t,r,o){let i=[];for(let s=0,l=0;s=t||d<=e?i.push(a):(ct&&i.push(a.slice(t-c,a.size,r)))}return i}function Oo(n,e=null){let t=n.domSelectionRange(),r=n.state.doc;if(!t.focusNode)return null;let o=n.docView.nearestDesc(t.focusNode),i=o&&o.size==0,s=n.docView.posFromDOM(t.focusNode,t.focusOffset,1);if(s<0)return null;let l=r.resolve(s),a,c;if(Jn(t)){for(a=s;o&&!o.node;)o=o.parent;let f=o.node;if(o&&f.isAtom&&w.isSelectable(f)&&o.parent&&!(f.isInline&&qd(t.focusNode,t.focusOffset,o.dom))){let u=o.posBefore;c=new w(s==u?l:r.resolve(u))}}else{if(t instanceof n.dom.ownerDocument.defaultView.Selection&&t.rangeCount>1){let f=s,u=s;for(let p=0;p{(t.anchorNode!=r||t.anchorOffset!=o)&&(e.removeEventListener("selectionchange",n.input.hideSelectionGuard),setTimeout(()=>{(!Wl(n)||n.state.selection.visible)&&n.dom.classList.remove("ProseMirror-hideselection")},20))})}function xf(n){let e=n.domSelection();if(!e)return;let t=n.cursorWrapper.dom,r=t.nodeName=="IMG";r?e.collapse(t.parentNode,H(t)+1):e.collapse(t,0),!r&&!n.state.selection.visible&&se&&Ge<=11&&(t.disabled=!0,t.disabled=!1)}function Kl(n,e){if(e instanceof w){let t=n.docView.descAt(e.from);t!=n.lastSelectedViewDesc&&(fl(n),t&&t.selectNode(),n.lastSelectedViewDesc=t)}else fl(n)}function fl(n){n.lastSelectedViewDesc&&(n.lastSelectedViewDesc.parent&&n.lastSelectedViewDesc.deselectNode(),n.lastSelectedViewDesc=void 0)}function To(n,e,t,r){return n.someProp("createSelectionBetween",o=>o(n,e,t))||O.between(e,t,r)}function ul(n){return n.editable&&!n.hasFocus()?!1:Hl(n)}function Hl(n){let e=n.domSelectionRange();if(!e.anchorNode)return!1;try{return n.dom.contains(e.anchorNode.nodeType==3?e.anchorNode.parentNode:e.anchorNode)&&(n.editable||n.dom.contains(e.focusNode.nodeType==3?e.focusNode.parentNode:e.focusNode))}catch{return!1}}function Sf(n){let e=n.docView.domFromPos(n.state.selection.anchor,0),t=n.domSelectionRange();return pt(e.node,e.offset,t.anchorNode,t.anchorOffset)}function go(n,e){let{$anchor:t,$head:r}=n.selection,o=e>0?t.max(r):t.min(r),i=o.parent.inlineContent?o.depth?n.doc.resolve(e>0?o.after():o.before()):null:o;return i&&C.findFrom(i,e)}function qe(n,e){return n.dispatch(n.state.tr.setSelection(e).scrollIntoView()),!0}function pl(n,e,t){let r=n.state.selection;if(r instanceof O)if(t.indexOf("s")>-1){let{$head:o}=r,i=o.textOffset?null:e<0?o.nodeBefore:o.nodeAfter;if(!i||i.isText||!i.isLeaf)return!1;let s=n.state.doc.resolve(o.pos+i.nodeSize*(e<0?-1:1));return qe(n,new O(r.$anchor,s))}else if(r.empty){if(n.endOfTextblock(e>0?"forward":"backward")){let o=go(n.state,e);return o&&o instanceof w?qe(n,o):!1}else if(!(de&&t.indexOf("m")>-1)){let o=r.$head,i=o.textOffset?null:e<0?o.nodeBefore:o.nodeAfter,s;if(!i||i.isText)return!1;let l=e<0?o.pos-i.nodeSize:o.pos;return i.isAtom||(s=n.docView.descAt(l))&&!s.contentDOM?w.isSelectable(i)?qe(n,new w(e<0?n.state.doc.resolve(o.pos-i.nodeSize):o)):fn?qe(n,new O(n.state.doc.resolve(e<0?l:l+i.nodeSize))):!1:!1}}else return!1;else{if(r instanceof w&&r.node.isInline)return qe(n,new O(e>0?r.$to:r.$from));{let o=go(n.state,e);return o?qe(n,o):!1}}}function Vn(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function on(n,e){let t=n.pmViewDesc;return t&&t.size==0&&(e<0||n.nextSibling||n.nodeName!="BR")}function Tt(n,e){return e<0?wf(n):Cf(n)}function wf(n){let e=n.domSelectionRange(),t=e.focusNode,r=e.focusOffset;if(!t)return;let o,i,s=!1;for(ue&&t.nodeType==1&&r0){if(t.nodeType!=1)break;{let l=t.childNodes[r-1];if(on(l,-1))o=t,i=--r;else if(l.nodeType==3)t=l,r=t.nodeValue.length;else break}}else{if(Jl(t))break;{let l=t.previousSibling;for(;l&&on(l,-1);)o=t.parentNode,i=H(l),l=l.previousSibling;if(l)t=l,r=Vn(t);else{if(t=t.parentNode,t==n.dom)break;r=0}}}s?yo(n,t,r):o&&yo(n,o,i)}function Cf(n){let e=n.domSelectionRange(),t=e.focusNode,r=e.focusOffset;if(!t)return;let o=Vn(t),i,s;for(;;)if(r{n.state==o&&Pe(n)},50)}function hl(n,e){let t=n.state.doc.resolve(e);if(!(J||Il)&&t.parent.inlineContent){let o=n.coordsAtPos(e);if(e>t.start()){let i=n.coordsAtPos(e-1),s=(i.top+i.bottom)/2;if(s>o.top&&s1)return i.lefto.top&&s1)return i.left>o.left?"ltr":"rtl"}}return getComputedStyle(n.dom).direction=="rtl"?"rtl":"ltr"}function ml(n,e,t){let r=n.state.selection;if(r instanceof O&&!r.empty||t.indexOf("s")>-1||de&&t.indexOf("m")>-1)return!1;let{$from:o,$to:i}=r;if(!o.parent.inlineContent||n.endOfTextblock(e<0?"up":"down")){let s=go(n.state,e);if(s&&s instanceof w)return qe(n,s)}if(!o.parent.inlineContent){let s=e<0?o:i,l=r instanceof Z?C.near(s,e):C.findFrom(s,e);return l?qe(n,l):!1}return!1}function gl(n,e){if(!(n.state.selection instanceof O))return!0;let{$head:t,$anchor:r,empty:o}=n.state.selection;if(!t.sameParent(r))return!0;if(!o)return!1;if(n.endOfTextblock(e>0?"forward":"backward"))return!0;let i=!t.textOffset&&(e<0?t.nodeBefore:t.nodeAfter);if(i&&!i.isText){let s=n.state.tr;return e<0?s.delete(t.pos-i.nodeSize,t.pos):s.delete(t.pos,t.pos+i.nodeSize),n.dispatch(s),!0}return!1}function yl(n,e,t){n.domObserver.stop(),e.contentEditable=t,n.domObserver.start()}function Of(n){if(!ee||n.state.selection.$head.parentOffset>0)return!1;let{focusNode:e,focusOffset:t}=n.domSelectionRange();if(e&&e.nodeType==1&&t==0&&e.firstChild&&e.firstChild.contentEditable=="false"){let r=e.firstChild;yl(n,r,"true"),setTimeout(()=>yl(n,r,"false"),20)}return!1}function Tf(n){let e="";return n.ctrlKey&&(e+="c"),n.metaKey&&(e+="m"),n.altKey&&(e+="a"),n.shiftKey&&(e+="s"),e}function Nf(n,e){let t=e.keyCode,r=Tf(e);if(t==8||de&&t==72&&r=="c")return gl(n,-1)||Tt(n,-1);if(t==46&&!e.shiftKey||de&&t==68&&r=="c")return gl(n,1)||Tt(n,1);if(t==13||t==27)return!0;if(t==37||de&&t==66&&r=="c"){let o=t==37?hl(n,n.state.selection.from)=="ltr"?-1:1:-1;return pl(n,o,r)||Tt(n,o)}else if(t==39||de&&t==70&&r=="c"){let o=t==39?hl(n,n.state.selection.from)=="ltr"?1:-1:1;return pl(n,o,r)||Tt(n,o)}else{if(t==38||de&&t==80&&r=="c")return ml(n,-1,r)||Tt(n,-1);if(t==40||de&&t==78&&r=="c")return Of(n)||ml(n,1,r)||Tt(n,1);if(r==(de?"m":"c")&&(t==66||t==73||t==89||t==90))return!0}return!1}function No(n,e){n.someProp("transformCopied",p=>{e=p(e,n)});let t=[],{content:r,openStart:o,openEnd:i}=e;for(;o>1&&i>1&&r.childCount==1&&r.firstChild.childCount==1;){o--,i--;let p=r.firstChild;t.push(p.type.name,p.attrs!=p.type.defaultAttrs?p.attrs:null),r=p.content}let s=n.someProp("clipboardSerializer")||ke.fromSchema(n.state.schema),l=Xl(),a=l.createElement("div");a.appendChild(s.serializeFragment(r,{document:l}));let c=a.firstChild,d,f=0;for(;c&&c.nodeType==1&&(d=Yl[c.nodeName.toLowerCase()]);){for(let p=d.length-1;p>=0;p--){let h=l.createElement(d[p]);for(;a.firstChild;)h.appendChild(a.firstChild);a.appendChild(h),f++}c=a.firstChild}c&&c.nodeType==1&&c.setAttribute("data-pm-slice",`${o} ${i}${f?` -${f}`:""} ${JSON.stringify(t)}`);let u=n.someProp("clipboardTextSerializer",p=>p(e,n))||e.content.textBetween(0,e.content.size,` -`);return{dom:a,text:f,slice:e}}function oi(n,e,t,r,i){let o=i.parent.type.spec.code,s,l;if(!t&&!e)return null;let a=!!e&&(r||o||!t);if(a){if(n.someProp("transformPastedText",f=>{e=f(e,o||r,n)}),o)return l=new b(k.from(n.state.schema.text(e.replace(/\r\n?/g,` -`))),0,0),n.someProp("transformPasted",f=>{l=f(l,n,!0)}),l;let u=n.someProp("clipboardTextParser",f=>f(e,i,r,n));if(u)l=u;else{let f=i.marks(),{schema:p}=n.state,h=pe.fromSchema(p);s=document.createElement("div"),e.split(/(?:\r\n?|\n)+/).forEach(m=>{let g=s.appendChild(document.createElement("p"));m&&g.appendChild(h.serializeNode(p.text(m,f)))})}}else n.someProp("transformPastedHTML",u=>{t=u(t,n)}),s=gd(t),Xt&&yd(s);let c=s&&s.querySelector("[data-pm-slice]"),d=c&&/^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(c.getAttribute("data-pm-slice")||"");if(d&&d[3])for(let u=+d[3];u>0;u--){let f=s.firstChild;for(;f&&f.nodeType!=1;)f=f.nextSibling;if(!f)break;s=f}if(l||(l=(n.someProp("clipboardParser")||n.someProp("domParser")||ce.fromSchema(n.state.schema)).parseSlice(s,{preserveWhitespace:!!(a||d),context:i,ruleFromNode(f){return f.nodeName=="BR"&&!f.nextSibling&&f.parentNode&&!pd.test(f.parentNode.nodeName)?{ignore:!0}:null}})),d)l=kd(zs(l,+d[1],+d[2]),d[4]);else if(l=b.maxOpen(hd(l.content,i),!0),l.openStart||l.openEnd){let u=0,f=0;for(let p=l.content.firstChild;u{l=u(l,n,a)}),l}var pd=/^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;function hd(n,e){if(n.childCount<2)return n;for(let t=e.depth;t>=0;t--){let i=e.node(t).contentMatchAt(e.index(t)),o,s=[];if(n.forEach(l=>{if(!s)return;let a=i.findWrapping(l.type),c;if(!a)return s=null;if(c=s.length&&o.length&&pl(a,o,l,s[s.length-1],0))s[s.length-1]=c;else{s.length&&(s[s.length-1]=hl(s[s.length-1],o.length));let d=fl(l,a);s.push(d),i=i.matchType(d.type),o=a}}),s)return k.from(s)}return n}function fl(n,e,t=0){for(let r=e.length-1;r>=t;r--)n=e[r].create(null,k.from(n));return n}function pl(n,e,t,r,i){if(i1&&(o=0),i=t&&(l=e<0?s.contentMatchAt(0).fillBefore(l,o<=i).append(l):l.append(s.contentMatchAt(s.childCount).fillBefore(k.empty,!0))),n.replaceChild(e<0?0:n.childCount-1,s.copy(l))}function zs(n,e,t){return et})),Pr.createHTML(n)):n}function gd(n){let e=/^(\s*]*>)*/.exec(n);e&&(n=n.slice(e[0].length));let t=gl().createElement("div"),r=/<([a-z][^>\s]+)/i.exec(n),i;if((i=r&&ml[r[1].toLowerCase()])&&(n=i.map(o=>"<"+o+">").join("")+n+i.map(o=>"").reverse().join("")),t.innerHTML=md(n),i)for(let o=0;o=0;l-=2){let a=t.nodes[r[l]];if(!a||a.hasRequiredAttrs())break;i=k.from(a.create(r[l+1],i)),o++,s++}return new b(i,o,s)}var Z={},Q={},bd={touchstart:!0,touchmove:!0},Gr=class{constructor(){this.shiftKey=!1,this.mouseDown=null,this.lastKeyCode=null,this.lastKeyCodeTime=0,this.lastClick={time:0,x:0,y:0,type:"",button:0},this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastIOSEnter=0,this.lastIOSEnterFallbackTimeout=-1,this.lastFocus=0,this.lastTouch=0,this.lastChromeDelete=0,this.composing=!1,this.compositionNode=null,this.composingTimeout=-1,this.compositionNodes=[],this.compositionEndedAt=-2e8,this.compositionID=1,this.badSafariComposition=!1,this.compositionPendingChanges=0,this.domChangeCount=0,this.eventHandlers=Object.create(null),this.hideSelectionGuard=null}};function xd(n){for(let e in Z){let t=Z[e];n.dom.addEventListener(e,n.input.eventHandlers[e]=r=>{Cd(n,r)&&!si(n,r)&&(n.editable||!(r.type in Q))&&t(n,r)},bd[e]?{passive:!0}:void 0)}G&&n.dom.addEventListener("input",()=>null),Yr(n)}function ze(n,e){n.input.lastSelectionOrigin=e,n.input.lastSelectionTime=Date.now()}function Sd(n){n.domObserver.stop();for(let e in n.input.eventHandlers)n.dom.removeEventListener(e,n.input.eventHandlers[e]);clearTimeout(n.input.composingTimeout),clearTimeout(n.input.lastIOSEnterFallbackTimeout)}function Yr(n){n.someProp("handleDOMEvents",e=>{for(let t in e)n.input.eventHandlers[t]||n.dom.addEventListener(t,n.input.eventHandlers[t]=r=>si(n,r))})}function si(n,e){return n.someProp("handleDOMEvents",t=>{let r=t[e.type];return r?r(n,e)||e.defaultPrevented:!1})}function Cd(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target;t!=n.dom;t=t.parentNode)if(!t||t.nodeType==11||t.pmViewDesc&&t.pmViewDesc.stopEvent(e))return!1;return!0}function wd(n,e){!si(n,e)&&Z[e.type]&&(n.editable||!(e.type in Q))&&Z[e.type](n,e)}Q.keydown=(n,e)=>{let t=e;if(n.input.shiftKey=t.keyCode==16||t.shiftKey,!kl(n,t)&&(n.input.lastKeyCode=t.keyCode,n.input.lastKeyCodeTime=Date.now(),!(Oe&&j&&t.keyCode==13)))if(t.keyCode!=229&&n.domObserver.forceFlush(),St&&t.keyCode==13&&!t.ctrlKey&&!t.altKey&&!t.metaKey){let r=Date.now();n.input.lastIOSEnter=r,n.input.lastIOSEnterFallbackTimeout=setTimeout(()=>{n.input.lastIOSEnter==r&&(n.someProp("handleKeyDown",i=>i(n,Xe(13,"Enter"))),n.input.lastIOSEnter=0)},200)}else n.someProp("handleKeyDown",r=>r(n,t))||fd(n,t)?t.preventDefault():ze(n,"key")};Q.keyup=(n,e)=>{e.keyCode==16&&(n.input.shiftKey=!1)};Q.keypress=(n,e)=>{let t=e;if(kl(n,t)||!t.charCode||t.ctrlKey&&!t.altKey||ie&&t.metaKey)return;if(n.someProp("handleKeyPress",i=>i(n,t))){t.preventDefault();return}let r=n.state.selection;if(!(r instanceof T)||!r.$from.sameParent(r.$to)){let i=String.fromCharCode(t.charCode),o=()=>n.state.tr.insertText(i).scrollIntoView();!/[\r\n]/.test(i)&&!n.someProp("handleTextInput",s=>s(n,r.$from.pos,r.$to.pos,i,o))&&n.dispatch(o()),t.preventDefault()}};function An(n){return{left:n.clientX,top:n.clientY}}function Md(n,e){let t=e.x-n.clientX,r=e.y-n.clientY;return t*t+r*r<100}function li(n,e,t,r,i){if(r==-1)return!1;let o=n.state.doc.resolve(r);for(let s=o.depth+1;s>0;s--)if(n.someProp(e,l=>s>o.depth?l(n,t,o.nodeAfter,o.before(s),i,!0):l(n,t,o.node(s),o.before(s),i,!1)))return!0;return!1}function bt(n,e,t){if(n.focused||n.focus(),n.state.selection.eq(e))return;let r=n.state.tr.setSelection(e);t=="pointer"&&r.setMeta("pointer",!0),n.dispatch(r)}function Ed(n,e){if(e==-1)return!1;let t=n.state.doc.resolve(e),r=t.nodeAfter;return r&&r.isAtom&&S.isSelectable(r)?(bt(n,new S(t),"pointer"),!0):!1}function Od(n,e){if(e==-1)return!1;let t=n.state.selection,r,i;t instanceof S&&(r=t.node);let o=n.state.doc.resolve(e);for(let s=o.depth+1;s>0;s--){let l=s>o.depth?o.nodeAfter:o.node(s);if(S.isSelectable(l)){r&&t.$from.depth>0&&s>=t.$from.depth&&o.before(t.$from.depth+1)==t.$from.pos?i=o.before(t.$from.depth):i=o.before(s);break}}return i!=null?(bt(n,S.create(n.state.doc,i),"pointer"),!0):!1}function Td(n,e,t,r,i){return li(n,"handleClickOn",e,t,r)||n.someProp("handleClick",o=>o(n,e,r))||(i?Od(n,t):Ed(n,t))}function Nd(n,e,t,r){return li(n,"handleDoubleClickOn",e,t,r)||n.someProp("handleDoubleClick",i=>i(n,e,r))}function Dd(n,e,t,r){return li(n,"handleTripleClickOn",e,t,r)||n.someProp("handleTripleClick",i=>i(n,e,r))||Ad(n,t,r)}function Ad(n,e,t){if(t.button!=0)return!1;let r=n.state.doc;if(e==-1)return r.inlineContent?(bt(n,T.create(r,0,r.content.size),"pointer"),!0):!1;let i=r.resolve(e);for(let o=i.depth+1;o>0;o--){let s=o>i.depth?i.nodeAfter:i.node(o),l=i.before(o);if(s.inlineContent)bt(n,T.create(r,l+1,l+1+s.content.size),"pointer");else if(S.isSelectable(s))bt(n,S.create(r,l),"pointer");else continue;return!0}}function ai(n){return Ht(n)}var yl=ie?"metaKey":"ctrlKey";Z.mousedown=(n,e)=>{let t=e;n.input.shiftKey=t.shiftKey;let r=ai(n),i=Date.now(),o="singleClick";i-n.input.lastClick.time<500&&Md(t,n.input.lastClick)&&!t[yl]&&n.input.lastClick.button==t.button&&(n.input.lastClick.type=="singleClick"?o="doubleClick":n.input.lastClick.type=="doubleClick"&&(o="tripleClick")),n.input.lastClick={time:i,x:t.clientX,y:t.clientY,type:o,button:t.button};let s=n.posAtCoords(An(t));s&&(o=="singleClick"?(n.input.mouseDown&&n.input.mouseDown.done(),n.input.mouseDown=new Xr(n,s,t,!!r)):(o=="doubleClick"?Nd:Dd)(n,s.pos,s.inside,t)?t.preventDefault():ze(n,"pointer"))};var Xr=class{constructor(e,t,r,i){this.view=e,this.pos=t,this.event=r,this.flushed=i,this.delayedSelectionSync=!1,this.mightDrag=null,this.startDoc=e.state.doc,this.selectNode=!!r[yl],this.allowDefault=r.shiftKey;let o,s;if(t.inside>-1)o=e.state.doc.nodeAt(t.inside),s=t.inside;else{let d=e.state.doc.resolve(t.pos);o=d.parent,s=d.depth?d.before():0}let l=i?null:r.target,a=l?e.docView.nearestDesc(l,!0):null;this.target=a&&a.nodeDOM.nodeType==1?a.nodeDOM:null;let{selection:c}=e.state;r.button==0&&(o.type.spec.draggable&&o.type.spec.selectable!==!1||c instanceof S&&c.from<=s&&c.to>s)&&(this.mightDrag={node:o,pos:s,addAttr:!!(this.target&&!this.target.draggable),setUneditable:!!(this.target&&se&&!this.target.hasAttribute("contentEditable"))}),this.target&&this.mightDrag&&(this.mightDrag.addAttr||this.mightDrag.setUneditable)&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&(this.target.draggable=!0),this.mightDrag.setUneditable&&setTimeout(()=>{this.view.input.mouseDown==this&&this.target.setAttribute("contentEditable","false")},20),this.view.domObserver.start()),e.root.addEventListener("mouseup",this.up=this.up.bind(this)),e.root.addEventListener("mousemove",this.move=this.move.bind(this)),ze(e,"pointer")}done(){this.view.root.removeEventListener("mouseup",this.up),this.view.root.removeEventListener("mousemove",this.move),this.mightDrag&&this.target&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&this.target.removeAttribute("draggable"),this.mightDrag.setUneditable&&this.target.removeAttribute("contentEditable"),this.view.domObserver.start()),this.delayedSelectionSync&&setTimeout(()=>Te(this.view)),this.view.input.mouseDown=null}up(e){if(this.done(),!this.view.dom.contains(e.target))return;let t=this.pos;this.view.state.doc!=this.startDoc&&(t=this.view.posAtCoords(An(e))),this.updateAllowDefault(e),this.allowDefault||!t?ze(this.view,"pointer"):Td(this.view,t.pos,t.inside,e,this.selectNode)?e.preventDefault():e.button==0&&(this.flushed||G&&this.mightDrag&&!this.mightDrag.node.isAtom||j&&!this.view.state.selection.visible&&Math.min(Math.abs(t.pos-this.view.state.selection.from),Math.abs(t.pos-this.view.state.selection.to))<=2)?(bt(this.view,E.near(this.view.state.doc.resolve(t.pos)),"pointer"),e.preventDefault()):ze(this.view,"pointer")}move(e){this.updateAllowDefault(e),ze(this.view,"pointer"),e.buttons==0&&this.done()}updateAllowDefault(e){!this.allowDefault&&(Math.abs(this.event.x-e.clientX)>4||Math.abs(this.event.y-e.clientY)>4)&&(this.allowDefault=!0)}};Z.touchstart=n=>{n.input.lastTouch=Date.now(),ai(n),ze(n,"pointer")};Z.touchmove=n=>{n.input.lastTouch=Date.now(),ze(n,"pointer")};Z.contextmenu=n=>ai(n);function kl(n,e){return n.composing?!0:G&&Math.abs(e.timeStamp-n.input.compositionEndedAt)<500?(n.input.compositionEndedAt=-2e8,!0):!1}var vd=Oe?5e3:-1;Q.compositionstart=Q.compositionupdate=n=>{if(!n.composing){n.domObserver.flush();let{state:e}=n,t=e.selection.$to;if(e.selection instanceof T&&(e.storedMarks||!t.textOffset&&t.parentOffset&&t.nodeBefore.marks.some(r=>r.type.spec.inclusive===!1)||j&&Zs&&Rd(n)))n.markCursor=n.state.storedMarks||t.marks(),Ht(n,!0),n.markCursor=null;else if(Ht(n,!e.selection.empty),se&&e.selection.empty&&t.parentOffset&&!t.textOffset&&t.nodeBefore.marks.length){let r=n.domSelectionRange();for(let i=r.focusNode,o=r.focusOffset;i&&i.nodeType==1&&o!=0;){let s=o<0?i.lastChild:i.childNodes[o-1];if(!s)break;if(s.nodeType==3){let l=n.domSelection();l&&l.collapse(s,s.nodeValue.length);break}else i=s,o=-1}}n.input.composing=!0}bl(n,vd)};function Rd(n){let{focusNode:e,focusOffset:t}=n.domSelectionRange();if(!e||e.nodeType!=1||t>=e.childNodes.length)return!1;let r=e.childNodes[t];return r.nodeType==1&&r.contentEditable=="false"}Q.compositionend=(n,e)=>{n.composing&&(n.input.composing=!1,n.input.compositionEndedAt=e.timeStamp,n.input.compositionPendingChanges=n.domObserver.pendingRecords().length?n.input.compositionID:0,n.input.compositionNode=null,n.input.badSafariComposition?n.domObserver.forceFlush():n.input.compositionPendingChanges&&Promise.resolve().then(()=>n.domObserver.flush()),n.input.compositionID++,bl(n,20))};function bl(n,e){clearTimeout(n.input.composingTimeout),e>-1&&(n.input.composingTimeout=setTimeout(()=>Ht(n),e))}function xl(n){for(n.composing&&(n.input.composing=!1,n.input.compositionEndedAt=Pd());n.input.compositionNodes.length>0;)n.input.compositionNodes.pop().markParentsDirty()}function Id(n){let e=n.domSelectionRange();if(!e.focusNode)return null;let t=Ac(e.focusNode,e.focusOffset),r=vc(e.focusNode,e.focusOffset);if(t&&r&&t!=r){let i=r.pmViewDesc,o=n.domObserver.lastChangedTextNode;if(t==o||r==o)return o;if(!i||!i.isText(r.nodeValue))return r;if(n.input.compositionNode==r){let s=t.pmViewDesc;if(!(!s||!s.isText(t.nodeValue)))return r}}return t||r}function Pd(){let n=document.createEvent("Event");return n.initEvent("event",!0,!0),n.timeStamp}function Ht(n,e=!1){if(!(Oe&&n.domObserver.flushingSoon>=0)){if(n.domObserver.forceFlush(),xl(n),e||n.docView&&n.docView.dirty){let t=ni(n),r=n.state.selection;return t&&!t.eq(r)?n.dispatch(n.state.tr.setSelection(t)):(n.markCursor||e)&&!r.$from.node(r.$from.sharedDepth(r.to)).inlineContent?n.dispatch(n.state.tr.deleteSelection()):n.updateState(n.state),!0}return!1}}function _d(n,e){if(!n.dom.parentNode)return;let t=n.dom.parentNode.appendChild(document.createElement("div"));t.appendChild(e),t.style.cssText="position: fixed; left: -10000px; top: 10px";let r=getSelection(),i=document.createRange();i.selectNodeContents(e),n.dom.blur(),r.removeAllRanges(),r.addRange(i),setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t),n.focus()},50)}var qt=ne&&Fe<15||St&&_c<604;Z.copy=Q.cut=(n,e)=>{let t=e,r=n.state.selection,i=t.type=="cut";if(r.empty)return;let o=qt?null:t.clipboardData,s=r.content(),{dom:l,text:a}=ii(n,s);o?(t.preventDefault(),o.clearData(),o.setData("text/html",l.innerHTML),o.setData("text/plain",a)):_d(n,l),i&&n.dispatch(n.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent","cut"))};function Bd(n){return n.openStart==0&&n.openEnd==0&&n.content.childCount==1?n.content.firstChild:null}function zd(n,e){if(!n.dom.parentNode)return;let t=n.input.shiftKey||n.state.selection.$from.parent.type.spec.code,r=n.dom.parentNode.appendChild(document.createElement(t?"textarea":"div"));t||(r.contentEditable="true"),r.style.cssText="position: fixed; left: -10000px; top: 10px",r.focus();let i=n.input.shiftKey&&n.input.lastKeyCode!=45;setTimeout(()=>{n.focus(),r.parentNode&&r.parentNode.removeChild(r),t?Ut(n,r.value,null,i,e):Ut(n,r.textContent,r.innerHTML,i,e)},50)}function Ut(n,e,t,r,i){let o=oi(n,e,t,r,n.state.selection.$from);if(n.someProp("handlePaste",a=>a(n,i,o||b.empty)))return!0;if(!o)return!1;let s=Bd(o),l=s?n.state.tr.replaceSelectionWith(s,r):n.state.tr.replaceSelection(o);return n.dispatch(l.scrollIntoView().setMeta("paste",!0).setMeta("uiEvent","paste")),!0}function Sl(n){let e=n.getData("text/plain")||n.getData("Text");if(e)return e;let t=n.getData("text/uri-list");return t?t.replace(/\r?\n/g," "):""}Q.paste=(n,e)=>{let t=e;if(n.composing&&!Oe)return;let r=qt?null:t.clipboardData,i=n.input.shiftKey&&n.input.lastKeyCode!=45;r&&Ut(n,Sl(r),r.getData("text/html"),i,t)?t.preventDefault():zd(n,t)};var En=class{constructor(e,t,r){this.slice=e,this.move=t,this.node=r}},Fd=ie?"altKey":"ctrlKey";function Cl(n,e){let t;return n.someProp("dragCopies",r=>{t=t||r(e)}),t!=null?!t:!e[Fd]}Z.dragstart=(n,e)=>{let t=e,r=n.input.mouseDown;if(r&&r.done(),!t.dataTransfer)return;let i=n.state.selection,o=i.empty?null:n.posAtCoords(An(t)),s;if(!(o&&o.pos>=i.from&&o.pos<=(i instanceof S?i.to-1:i.to))){if(r&&r.mightDrag)s=S.create(n.state.doc,r.mightDrag.pos);else if(t.target&&t.target.nodeType==1){let u=n.docView.nearestDesc(t.target,!0);u&&u.node.type.spec.draggable&&u!=n.docView&&(s=S.create(n.state.doc,u.posBefore))}}let l=(s||n.state.selection).content(),{dom:a,text:c,slice:d}=ii(n,l);(!t.dataTransfer.files.length||!j||Xs>120)&&t.dataTransfer.clearData(),t.dataTransfer.setData(qt?"Text":"text/html",a.innerHTML),t.dataTransfer.effectAllowed="copyMove",qt||t.dataTransfer.setData("text/plain",c),n.dragging=new En(d,Cl(n,t),s)};Z.dragend=n=>{let e=n.dragging;window.setTimeout(()=>{n.dragging==e&&(n.dragging=null)},50)};Q.dragover=Q.dragenter=(n,e)=>e.preventDefault();Q.drop=(n,e)=>{try{Ld(n,e,n.dragging)}finally{n.dragging=null}};function Ld(n,e,t){if(!e.dataTransfer)return;let r=n.posAtCoords(An(e));if(!r)return;let i=n.state.doc.resolve(r.pos),o=t&&t.slice;o?n.someProp("transformPasted",p=>{o=p(o,n,!1)}):o=oi(n,Sl(e.dataTransfer),qt?null:e.dataTransfer.getData("text/html"),!1,i);let s=!!(t&&Cl(n,e));if(n.someProp("handleDrop",p=>p(n,e,o||b.empty,s))){e.preventDefault();return}if(!o)return;e.preventDefault();let l=o?Vt(n.state.doc,i.pos,o):i.pos;l==null&&(l=i.pos);let a=n.state.tr;if(s){let{node:p}=t;p?p.replace(a):a.deleteSelection()}let c=a.mapping.map(l),d=o.openStart==0&&o.openEnd==0&&o.content.childCount==1,u=a.doc;if(d?a.replaceRangeWith(c,c,o.content.firstChild):a.replaceRange(c,c,o),a.doc.eq(u))return;let f=a.doc.resolve(c);if(d&&S.isSelectable(o.content.firstChild)&&f.nodeAfter&&f.nodeAfter.sameMarkup(o.content.firstChild))a.setSelection(new S(f));else{let p=a.mapping.map(l);a.mapping.maps[a.mapping.maps.length-1].forEach((h,m,g,y)=>p=y),a.setSelection(ri(n,f,a.doc.resolve(p)))}n.focus(),n.dispatch(a.setMeta("uiEvent","drop"))}Z.focus=n=>{n.input.lastFocus=Date.now(),n.focused||(n.domObserver.stop(),n.dom.classList.add("ProseMirror-focused"),n.domObserver.start(),n.focused=!0,setTimeout(()=>{n.docView&&n.hasFocus()&&!n.domObserver.currentSelection.eq(n.domSelectionRange())&&Te(n)},20))};Z.blur=(n,e)=>{let t=e;n.focused&&(n.domObserver.stop(),n.dom.classList.remove("ProseMirror-focused"),n.domObserver.start(),t.relatedTarget&&n.dom.contains(t.relatedTarget)&&n.domObserver.currentSelection.clear(),n.focused=!1)};Z.beforeinput=(n,e)=>{if(j&&Oe&&e.inputType=="deleteContentBackward"){n.domObserver.flushSoon();let{domChangeCount:r}=n.input;setTimeout(()=>{if(n.input.domChangeCount!=r||(n.dom.blur(),n.focus(),n.someProp("handleKeyDown",o=>o(n,Xe(8,"Backspace")))))return;let{$cursor:i}=n.state.selection;i&&i.pos>0&&n.dispatch(n.state.tr.delete(i.pos-1,i.pos).scrollIntoView())},50)}};for(let n in Q)Z[n]=Q[n];function Gt(n,e){if(n==e)return!0;for(let t in n)if(n[t]!==e[t])return!1;for(let t in e)if(!(t in n))return!1;return!0}var On=class n{constructor(e,t){this.toDOM=e,this.spec=t||tt,this.side=this.spec.side||0}map(e,t,r,i){let{pos:o,deleted:s}=e.mapResult(t.from+i,this.side<0?-1:1);return s?null:new de(o-r,o-r,this)}valid(){return!0}eq(e){return this==e||e instanceof n&&(this.spec.key&&this.spec.key==e.spec.key||this.toDOM==e.toDOM&&Gt(this.spec,e.spec))}destroy(e){this.spec.destroy&&this.spec.destroy(e)}},et=class n{constructor(e,t){this.attrs=e,this.spec=t||tt}map(e,t,r,i){let o=e.map(t.from+i,this.spec.inclusiveStart?-1:1)-r,s=e.map(t.to+i,this.spec.inclusiveEnd?1:-1)-r;return o>=s?null:new de(o,s,this)}valid(e,t){return t.from=e&&(!o||o(l.spec))&&r.push(l.copy(l.from+i,l.to+i))}for(let s=0;se){let l=this.children[s]+1;this.children[s+2].findInner(e-l,t-l,r,i+l,o)}}map(e,t,r){return this==U||e.maps.length==0?this:this.mapInner(e,t,0,0,r||tt)}mapInner(e,t,r,i,o){let s;for(let l=0;l{let c=a+r,d;if(d=Ml(t,l,c)){for(i||(i=this.children.slice());ol&&u.to=e){this.children[l]==e&&(r=this.children[l+2]);break}let o=e+1,s=o+t.content.size;for(let l=0;lo&&a.type instanceof et){let c=Math.max(o,a.from)-o,d=Math.min(s,a.to)-o;ci.map(e,t,tt));return n.from(r)}forChild(e,t){if(t.isLeaf)return X.empty;let r=[];for(let i=0;it instanceof X)?e:e.reduce((t,r)=>t.concat(r instanceof X?r:r.members),[]))}}forEachSet(e){for(let t=0;t{let g=m-h-(p-f);for(let y=0;yw+d-u)continue;let M=l[y]+d-u;p>=M?l[y+1]=f<=M?-2:-1:f>=d&&g&&(l[y]+=g,l[y+1]+=g)}u+=g}),d=t.maps[c].map(d,-1)}let a=!1;for(let c=0;c=r.content.size){a=!0;continue}let f=t.map(n[c+1]+o,-1),p=f-i,{index:h,offset:m}=r.content.findIndex(u),g=r.maybeChild(h);if(g&&m==u&&m+g.nodeSize==p){let y=l[c+2].mapInner(t,g,d+1,n[c]+o+1,s);y!=U?(l[c]=u,l[c+1]=p,l[c+2]=y):(l[c+1]=-2,a=!0)}else a=!0}if(a){let c=$d(l,n,e,t,i,o,s),d=Nn(c,r,0,s);e=d.local;for(let u=0;ut&&s.to{let c=Ml(n,l,a+t);if(c){o=!0;let d=Nn(c,l,t+a+1,r);d!=U&&i.push(a,a+l.nodeSize,d)}});let s=wl(o?El(n):n,-t).sort(nt);for(let l=0;l0;)e++;n.splice(e,0,t)}function _r(n){let e=[];return n.someProp("decorations",t=>{let r=t(n.state);r&&r!=U&&e.push(r)}),n.cursorWrapper&&e.push(X.create(n.state.doc,[n.cursorWrapper.deco])),Tn.from(e)}var jd={childList:!0,characterData:!0,characterDataOldValue:!0,attributes:!0,attributeOldValue:!0,subtree:!0},Wd=ne&&Fe<=11,Qr=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}set(e){this.anchorNode=e.anchorNode,this.anchorOffset=e.anchorOffset,this.focusNode=e.focusNode,this.focusOffset=e.focusOffset}clear(){this.anchorNode=this.focusNode=null}eq(e){return e.anchorNode==this.anchorNode&&e.anchorOffset==this.anchorOffset&&e.focusNode==this.focusNode&&e.focusOffset==this.focusOffset}},ei=class{constructor(e,t){this.view=e,this.handleDOMChange=t,this.queue=[],this.flushingSoon=-1,this.observer=null,this.currentSelection=new Qr,this.onCharData=null,this.suppressingSelectionUpdates=!1,this.lastChangedTextNode=null,this.observer=window.MutationObserver&&new window.MutationObserver(r=>{for(let i=0;ii.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():G&&e.composing&&r.some(i=>i.type=="childList"&&i.target.nodeName=="TR")?(e.input.badSafariComposition=!0,this.flushSoon()):this.flush()}),Wd&&(this.onCharData=r=>{this.queue.push({target:r.target,type:"characterData",oldValue:r.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this)}flushSoon(){this.flushingSoon<0&&(this.flushingSoon=window.setTimeout(()=>{this.flushingSoon=-1,this.flush()},20))}forceFlush(){this.flushingSoon>-1&&(window.clearTimeout(this.flushingSoon),this.flushingSoon=-1,this.flush())}start(){this.observer&&(this.observer.takeRecords(),this.observer.observe(this.view.dom,jd)),this.onCharData&&this.view.dom.addEventListener("DOMCharacterDataModified",this.onCharData),this.connectSelection()}stop(){if(this.observer){let e=this.observer.takeRecords();if(e.length){for(let t=0;tthis.flush(),20)}this.observer.disconnect()}this.onCharData&&this.view.dom.removeEventListener("DOMCharacterDataModified",this.onCharData),this.disconnectSelection()}connectSelection(){this.view.dom.ownerDocument.addEventListener("selectionchange",this.onSelectionChange)}disconnectSelection(){this.view.dom.ownerDocument.removeEventListener("selectionchange",this.onSelectionChange)}suppressSelectionUpdates(){this.suppressingSelectionUpdates=!0,setTimeout(()=>this.suppressingSelectionUpdates=!1,50)}onSelectionChange(){if(vs(this.view)){if(this.suppressingSelectionUpdates)return Te(this.view);if(ne&&Fe<=11&&!this.view.state.selection.empty){let e=this.view.domSelectionRange();if(e.focusNode&&rt(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset))return this.flushSoon()}this.flush()}}setCurSelection(){this.currentSelection.set(this.view.domSelectionRange())}ignoreSelectionChange(e){if(!e.focusNode)return!0;let t=new Set,r;for(let o=e.focusNode;o;o=xt(o))t.add(o);for(let o=e.anchorNode;o;o=xt(o))if(t.has(o)){r=o;break}let i=r&&this.view.docView.nearestDesc(r);if(i&&i.ignoreMutation({type:"selection",target:r.nodeType==3?r.parentNode:r}))return this.setCurSelection(),!0}pendingRecords(){if(this.observer)for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}flush(){let{view:e}=this;if(!e.docView||this.flushingSoon>-1)return;let t=this.pendingRecords();t.length&&(this.queue=[]);let r=e.domSelectionRange(),i=!this.suppressingSelectionUpdates&&!this.currentSelection.eq(r)&&vs(e)&&!this.ignoreSelectionChange(r),o=-1,s=-1,l=!1,a=[];if(e.editable)for(let d=0;dd.nodeName=="BR")&&(e.input.lastKeyCode==8||e.input.lastKeyCode==46)){for(let d of a)if(d.nodeName=="BR"&&d.parentNode){let u=d.nextSibling;for(;u&&u.nodeType==1;){if(u.contentEditable=="false"){d.parentNode.removeChild(d);break}u=u.firstChild}}}else if(se&&a.length){let d=a.filter(u=>u.nodeName=="BR");if(d.length==2){let[u,f]=d;u.parentNode&&u.parentNode.parentNode==f.parentNode?f.remove():u.remove()}else{let{focusNode:u}=this.currentSelection;for(let f of d){let p=f.parentNode;p&&p.nodeName=="LI"&&(!u||Hd(e,u)!=p)&&f.remove()}}}let c=null;o<0&&i&&e.input.lastFocus>Date.now()-200&&Math.max(e.input.lastTouch,e.input.lastClick.time)-1||i)&&(o>-1&&(e.docView.markDirty(o,s),Kd(e)),e.input.badSafariComposition&&(e.input.badSafariComposition=!1,qd(e,a)),this.handleDOMChange(o,s,l,a),e.docView&&e.docView.dirty?e.updateState(e.state):this.currentSelection.eq(r)||Te(e),this.currentSelection.set(r))}registerMutation(e,t){if(t.indexOf(e.target)>-1)return null;let r=this.view.docView.nearestDesc(e.target);if(e.type=="attributes"&&(r==this.view.docView||e.attributeName=="contenteditable"||e.attributeName=="style"&&!e.oldValue&&!e.target.getAttribute("style"))||!r||r.ignoreMutation(e))return null;if(e.type=="childList"){for(let d=0;di;g--){let y=r.childNodes[g-1],w=y.pmViewDesc;if(y.nodeName=="BR"&&!w){o=g;break}if(!w||w.size)break}let u=n.state.doc,f=n.someProp("domParser")||ce.fromSchema(n.state.schema),p=u.resolve(s),h=null,m=f.parse(r,{topNode:p.parent,topMatch:p.parent.contentMatchAt(p.index()),topOpen:!0,from:i,to:o,preserveWhitespace:p.parent.type.whitespace=="pre"?"full":!0,findPositions:c,ruleFromNode:Gd,context:p});if(c&&c[0].pos!=null){let g=c[0].pos,y=c[1]&&c[1].pos;y==null&&(y=g),h={anchor:g+s,head:y+s}}return{doc:m,sel:h,from:s,to:l}}function Gd(n){let e=n.pmViewDesc;if(e)return e.parseRule();if(n.nodeName=="BR"&&n.parentNode){if(G&&/^(ul|ol)$/i.test(n.parentNode.nodeName)){let t=document.createElement("div");return t.appendChild(document.createElement("li")),{skip:t}}else if(n.parentNode.lastChild==n||G&&/^(tr|table)$/i.test(n.parentNode.nodeName))return{ignore:!0}}else if(n.nodeName=="IMG"&&n.getAttribute("mark-placeholder"))return{ignore:!0};return null}var Yd=/^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;function Xd(n,e,t,r,i){let o=n.input.compositionPendingChanges||(n.composing?n.input.compositionID:0);if(n.input.compositionPendingChanges=0,e<0){let O=n.input.lastSelectionTime>Date.now()-50?n.input.lastSelectionOrigin:null,R=ni(n,O);if(R&&!n.state.selection.eq(R)){if(j&&Oe&&n.input.lastKeyCode===13&&Date.now()-100Fa(n,Xe(13,"Enter"))))return;let J=n.state.tr.setSelection(R);O=="pointer"?J.setMeta("pointer",!0):O=="key"&&J.scrollIntoView(),o&&J.setMeta("composition",o),n.dispatch(J)}return}let s=n.state.doc.resolve(e),l=s.sharedDepth(t);e=s.before(l+1),t=n.state.doc.resolve(t).after(l+1);let a=n.state.selection,c=Ud(n,e,t),d=n.state.doc,u=d.slice(c.from,c.to),f,p;n.input.lastKeyCode===8&&Date.now()-100Date.now()-225||Oe)&&i.some(O=>O.nodeType==1&&!Yd.test(O.nodeName))&&(!h||h.endA>=h.endB)&&n.someProp("handleKeyDown",O=>O(n,Xe(13,"Enter")))){n.input.lastIOSEnter=0;return}if(!h)if(r&&a instanceof T&&!a.empty&&a.$head.sameParent(a.$anchor)&&!n.composing&&!(c.sel&&c.sel.anchor!=c.sel.head))h={start:a.from,endA:a.to,endB:a.to};else{if(c.sel){let O=Ws(n,n.state.doc,c.sel);if(O&&!O.eq(n.state.selection)){let R=n.state.tr.setSelection(O);o&&R.setMeta("composition",o),n.dispatch(R)}}return}n.state.selection.fromn.state.selection.from&&h.start<=n.state.selection.from+2&&n.state.selection.from>=c.from?h.start=n.state.selection.from:h.endA=n.state.selection.to-2&&n.state.selection.to<=c.to&&(h.endB+=n.state.selection.to-h.endA,h.endA=n.state.selection.to)),ne&&Fe<=11&&h.endB==h.start+1&&h.endA==h.start&&h.start>c.from&&c.doc.textBetween(h.start-c.from-1,h.start-c.from+1)==" \xA0"&&(h.start--,h.endA--,h.endB--);let m=c.doc.resolveNoCache(h.start-c.from),g=c.doc.resolveNoCache(h.endB-c.from),y=d.resolve(h.start),w=m.sameParent(g)&&m.parent.inlineContent&&y.end()>=h.endA;if((St&&n.input.lastIOSEnter>Date.now()-225&&(!w||i.some(O=>O.nodeName=="DIV"||O.nodeName=="P"))||!w&&m.posO(n,Xe(13,"Enter")))){n.input.lastIOSEnter=0;return}if(n.state.selection.anchor>h.start&&Qd(d,h.start,h.endA,m,g)&&n.someProp("handleKeyDown",O=>O(n,Xe(8,"Backspace")))){Oe&&j&&n.domObserver.suppressSelectionUpdates();return}j&&h.endB==h.start&&(n.input.lastChromeDelete=Date.now()),Oe&&!w&&m.start()!=g.start()&&g.parentOffset==0&&m.depth==g.depth&&c.sel&&c.sel.anchor==c.sel.head&&c.sel.head==h.endA&&(h.endB-=2,g=c.doc.resolveNoCache(h.endB-c.from),setTimeout(()=>{n.someProp("handleKeyDown",function(O){return O(n,Xe(13,"Enter"))})},20));let M=h.start,A=h.endA,v=O=>{let R=O||n.state.tr.replace(M,A,c.doc.slice(h.start-c.from,h.endB-c.from));if(c.sel){let J=Ws(n,R.doc,c.sel);J&&!(j&&n.composing&&J.empty&&(h.start!=h.endB||n.input.lastChromeDeleteTe(n),20));let O=v(n.state.tr.delete(M,A)),R=d.resolve(h.start).marksAcross(d.resolve(h.endA));R&&O.ensureMarks(R),n.dispatch(O)}else if(h.endA==h.endB&&(B=Zd(m.parent.content.cut(m.parentOffset,g.parentOffset),y.parent.content.cut(y.parentOffset,h.endA-y.start())))){let O=v(n.state.tr);B.type=="add"?O.addMark(M,A,B.mark):O.removeMark(M,A,B.mark),n.dispatch(O)}else if(m.parent.child(m.index()).isText&&m.index()==g.index()-(g.textOffset?0:1)){let O=m.parent.textBetween(m.parentOffset,g.parentOffset),R=()=>v(n.state.tr.insertText(O,M,A));n.someProp("handleTextInput",J=>J(n,M,A,O,R))||n.dispatch(R())}else n.dispatch(v());else n.dispatch(v())}function Ws(n,e,t){return Math.max(t.anchor,t.head)>e.content.size?null:ri(n,e.resolve(t.anchor),e.resolve(t.head))}function Zd(n,e){let t=n.firstChild.marks,r=e.firstChild.marks,i=t,o=r,s,l,a;for(let d=0;dd.mark(l.addToSet(d.marks));else if(i.length==0&&o.length==1)l=o[0],s="remove",a=d=>d.mark(l.removeFromSet(d.marks));else return null;let c=[];for(let d=0;dt||Br(s,!0,!1)0&&(e||n.indexAfter(r)==n.node(r).childCount);)r--,i++,e=!1;if(t){let o=n.node(r).maybeChild(n.indexAfter(r));for(;o&&!o.isLeaf;)o=o.firstChild,i++}return i}function eu(n,e,t,r,i){let o=n.findDiffStart(e,t);if(o==null)return null;let{a:s,b:l}=n.findDiffEnd(e,t+n.size,t+e.size);if(i=="end"){let a=Math.max(0,o-Math.min(s,l));r-=s+a-o}if(s=s?o-r:0;o-=a,o&&o=l?o-r:0;o-=a,o&&o=56320&&e<=57343&&t>=55296&&t<=56319}var tu=oi,nu=Ht,wt=class{constructor(e,t){this._root=null,this.focused=!1,this.trackWrites=null,this.mounted=!1,this.markCursor=null,this.cursorWrapper=null,this.lastSelectedViewDesc=void 0,this.input=new Gr,this.prevDirectPlugins=[],this.pluginViews=[],this.requiresGeckoHackNode=!1,this.dragging=null,this._props=t,this.state=t.state,this.directPlugins=t.plugins||[],this.directPlugins.forEach(Gs),this.dispatch=this.dispatch.bind(this),this.dom=e&&e.mount||document.createElement("div"),e&&(e.appendChild?e.appendChild(this.dom):typeof e=="function"?e(this.dom):e.mount&&(this.mounted=!0)),this.editable=qs(this),Hs(this),this.nodeViews=Us(this),this.docView=Es(this.state.doc,Js(this),_r(this),this.dom,this),this.domObserver=new ei(this,(r,i,o,s)=>Xd(this,r,i,o,s)),this.domObserver.start(),xd(this),this.updatePluginViews()}get composing(){return this.input.composing}get props(){if(this._props.state!=this.state){let e=this._props;this._props={};for(let t in e)this._props[t]=e[t];this._props.state=this.state}return this._props}update(e){e.handleDOMEvents!=this._props.handleDOMEvents&&Yr(this);let t=this._props;this._props=e,e.plugins&&(e.plugins.forEach(Gs),this.directPlugins=e.plugins),this.updateStateInner(e.state,t)}setProps(e){let t={};for(let r in this._props)t[r]=this._props[r];t.state=this.state;for(let r in e)t[r]=e[r];this.update(t)}updateState(e){this.updateStateInner(e,this._props)}updateStateInner(e,t){var r;let i=this.state,o=!1,s=!1;e.storedMarks&&this.composing&&(xl(this),s=!0),this.state=e;let l=i.plugins!=e.plugins||this._props.plugins!=t.plugins;if(l||this._props.plugins!=t.plugins||this._props.nodeViews!=t.nodeViews){let p=Us(this);iu(p,this.nodeViews)&&(this.nodeViews=p,o=!0)}(l||t.handleDOMEvents!=this._props.handleDOMEvents)&&Yr(this),this.editable=qs(this),Hs(this);let a=_r(this),c=Js(this),d=i.plugins!=e.plugins&&!i.doc.eq(e.doc)?"reset":e.scrollToSelection>i.scrollToSelection?"to selection":"preserve",u=o||!this.docView.matchesNode(e.doc,c,a);(u||!e.selection.eq(i.selection))&&(s=!0);let f=d=="preserve"&&s&&this.dom.style.overflowAnchor==null&&Fc(this);if(s){this.domObserver.stop();let p=u&&(ne||j)&&!this.composing&&!i.selection.empty&&!e.selection.empty&&ru(i.selection,e.selection);if(u){let h=j?this.trackWrites=this.domSelectionRange().focusNode:null;this.composing&&(this.input.compositionNode=Id(this)),(o||!this.docView.update(e.doc,c,a,this))&&(this.docView.updateOuterDeco(c),this.docView.destroy(),this.docView=Es(e.doc,c,a,this.dom,this)),h&&(!this.trackWrites||!this.dom.contains(this.trackWrites))&&(p=!0)}p||!(this.input.mouseDown&&this.domObserver.currentSelection.eq(this.domSelectionRange())&&od(this))?Te(this,p):(cl(this,e.selection),this.domObserver.setCurSelection()),this.domObserver.start()}this.updatePluginViews(i),!((r=this.dragging)===null||r===void 0)&&r.node&&!i.doc.eq(e.doc)&&this.updateDraggedNode(this.dragging,i),d=="reset"?this.dom.scrollTop=0:d=="to selection"?this.scrollToSelection():f&&Lc(f)}scrollToSelection(){let e=this.domSelectionRange().focusNode;if(!(!e||!this.dom.contains(e.nodeType==1?e:e.parentNode))){if(!this.someProp("handleScrollToSelection",t=>t(this)))if(this.state.selection instanceof S){let t=this.docView.domAfterPos(this.state.selection.from);t.nodeType==1&&bs(this,t.getBoundingClientRect(),e)}else bs(this,this.coordsAtPos(this.state.selection.head,1),e)}}destroyPluginViews(){let e;for(;e=this.pluginViews.pop();)e.destroy&&e.destroy()}updatePluginViews(e){if(!e||e.plugins!=this.state.plugins||this.directPlugins!=this.prevDirectPlugins){this.prevDirectPlugins=this.directPlugins,this.destroyPluginViews();for(let t=0;t0&&ot.ownerDocument.getSelection()),this._root=t}return e||document}updateRoot(){this._root=null}posAtCoords(e){return Jc(this,e)}coordsAtPos(e,t=1){return rl(this,e,t)}domAtPos(e,t=0){return this.docView.domFromPos(e,t)}nodeDOM(e){let t=this.docView.descAt(e);return t?t.nodeDOM:null}posAtDOM(e,t,r=-1){let i=this.docView.posFromDOM(e,t,r);if(i==null)throw new RangeError("DOM position not inside the editor");return i}endOfTextblock(e,t){return Yc(this,t||this.state,e)}pasteHTML(e,t){return Ut(this,"",e,!1,t||new ClipboardEvent("paste"))}pasteText(e,t){return Ut(this,e,null,!0,t||new ClipboardEvent("paste"))}serializeForClipboard(e){return ii(this,e)}destroy(){this.docView&&(Sd(this),this.destroyPluginViews(),this.mounted?(this.docView.update(this.state.doc,[],_r(this),this),this.dom.textContent=""):this.dom.parentNode&&this.dom.parentNode.removeChild(this.dom),this.docView.destroy(),this.docView=null,Nc())}get isDestroyed(){return this.docView==null}dispatchEvent(e){return wd(this,e)}domSelectionRange(){let e=this.domSelection();return e?G&&this.root.nodeType===11&&Ic(this.dom.ownerDocument)==this.dom&&Jd(this,e)||e:{focusNode:null,focusOffset:0,anchorNode:null,anchorOffset:0}}domSelection(){return this.root.getSelection()}};wt.prototype.dispatch=function(n){let e=this._props.dispatchTransaction;e?e.call(this,n):this.updateState(this.state.apply(n))};function Js(n){let e=Object.create(null);return e.class="ProseMirror",e.contenteditable=String(n.editable),n.someProp("attributes",t=>{if(typeof t=="function"&&(t=t(n.state)),t)for(let r in t)r=="class"?e.class+=" "+t[r]:r=="style"?e.style=(e.style?e.style+";":"")+t[r]:!e[r]&&r!="contenteditable"&&r!="nodeName"&&(e[r]=String(t[r]))}),e.translate||(e.translate="no"),[de.node(0,n.state.doc.content.size,e)]}function Hs(n){if(n.markCursor){let e=document.createElement("img");e.className="ProseMirror-separator",e.setAttribute("mark-placeholder","true"),e.setAttribute("alt",""),n.cursorWrapper={dom:e,deco:de.widget(n.state.selection.from,e,{raw:!0,marks:n.markCursor})}}else n.cursorWrapper=null}function qs(n){return!n.someProp("editable",e=>e(n.state)===!1)}function ru(n,e){let t=Math.min(n.$anchor.sharedDepth(n.head),e.$anchor.sharedDepth(e.head));return n.$anchor.start(t)!=e.$anchor.start(t)}function Us(n){let e=Object.create(null);function t(r){for(let i in r)Object.prototype.hasOwnProperty.call(e,i)||(e[i]=r[i])}return n.someProp("nodeViews",t),n.someProp("markViews",t),e}function iu(n,e){let t=0,r=0;for(let i in n){if(n[i]!=e[i])return!0;t++}for(let i in e)r++;return t!=r}function Gs(n){if(n.spec.state||n.spec.filterTransaction||n.spec.appendTransaction)throw new RangeError("Plugins passed directly to the view must not have a state component")}var pi={};ae(pi,{keydownHandler:()=>In,keymap:()=>fi});var Ne={8:"Backspace",9:"Tab",10:"Enter",12:"NumLock",13:"Enter",16:"Shift",17:"Control",18:"Alt",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",44:"PrintScreen",45:"Insert",46:"Delete",59:";",61:"=",91:"Meta",92:"Meta",106:"*",107:"+",108:",",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",160:"Shift",161:"Shift",162:"Control",163:"Control",164:"Alt",165:"Alt",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},Rn={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},ou=typeof navigator<"u"&&/Mac/.test(navigator.platform),su=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(_=0;_<10;_++)Ne[48+_]=Ne[96+_]=String(_);var _;for(_=1;_<=24;_++)Ne[_+111]="F"+_;var _;for(_=65;_<=90;_++)Ne[_]=String.fromCharCode(_+32),Rn[_]=String.fromCharCode(_);var _;for(vn in Ne)Rn.hasOwnProperty(vn)||(Rn[vn]=Ne[vn]);var vn;function Ol(n){var e=ou&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||su&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?Rn:Ne)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}var lu=typeof navigator<"u"&&/Mac|iP(hone|[oa]d)/.test(navigator.platform),au=typeof navigator<"u"&&/Win/.test(navigator.platform);function cu(n){let e=n.split(/-(?!$)/),t=e[e.length-1];t=="Space"&&(t=" ");let r,i,o,s;for(let l=0;lIe,DOMParser:()=>ce,DOMSerializer:()=>pe,Fragment:()=>k,Mark:()=>D,MarkType:()=>at,Node:()=>Y,NodeRange:()=>Re,NodeType:()=>Pt,ReplaceError:()=>ve,ResolvedPos:()=>It,Schema:()=>ct,Slice:()=>b});var mi={};ae(mi,{AddMarkStep:()=>ft,AddNodeMarkStep:()=>pt,AttrStep:()=>Ft,DocAttrStep:()=>Lt,MapResult:()=>dt,Mapping:()=>ut,RemoveMarkStep:()=>Pe,RemoveNodeMarkStep:()=>Ke,ReplaceAroundStep:()=>I,ReplaceStep:()=>V,Step:()=>z,StepMap:()=>he,StepResult:()=>L,Transform:()=>He,TransformError:()=>Je,canJoin:()=>re,canSplit:()=>ee,dropPoint:()=>Vt,findWrapping:()=>qe,insertPoint:()=>rs,joinPoint:()=>Ue,liftTarget:()=>me,replaceStep:()=>ht});var Di={};ae(Di,{autoJoin:()=>yu,baseKeymap:()=>bu,chainCommands:()=>Jn,createParagraphNear:()=>Vn,deleteSelection:()=>Zt,exitCode:()=>Ln,joinBackward:()=>Pn,joinDown:()=>Ci,joinForward:()=>Bn,joinTextblockBackward:()=>yi,joinTextblockForward:()=>ki,joinUp:()=>Si,lift:()=>wi,liftEmptyBlock:()=>$n,macBaseKeymap:()=>Ni,newlineInCode:()=>Fn,pcBaseKeymap:()=>ke,selectAll:()=>Rl,selectNodeBackward:()=>_n,selectNodeForward:()=>zn,selectParentNode:()=>Oi,selectTextblockEnd:()=>Wn,selectTextblockStart:()=>jn,setBlockType:()=>Kn,splitBlock:()=>Ei,splitBlockAs:()=>vl,splitBlockKeepMarks:()=>uu,toggleMark:()=>mu,wrapIn:()=>Ti});var Zt=(n,e)=>n.selection.empty?!1:(e&&e(n.tr.deleteSelection().scrollIntoView()),!0);function Nl(n,e){let{$cursor:t}=n.selection;return!t||(e?!e.endOfTextblock("backward",n):t.parentOffset>0)?null:t}var Pn=(n,e,t)=>{let r=Nl(n,t);if(!r)return!1;let i=bi(r);if(!i){let s=r.blockRange(),l=s&&me(s);return l==null?!1:(e&&e(n.tr.lift(s,l).scrollIntoView()),!0)}let o=i.nodeBefore;if(Il(n,i,e,-1))return!0;if(r.parent.content.size==0&&(Mt(o,"end")||S.isSelectable(o)))for(let s=r.depth;;s--){let l=ht(n.doc,r.before(s),r.after(s),b.empty);if(l&&l.slice.size1)break}return o.isAtom&&i.depth==r.depth-1?(e&&e(n.tr.delete(i.pos-o.nodeSize,i.pos).scrollIntoView()),!0):!1},yi=(n,e,t)=>{let r=Nl(n,t);if(!r)return!1;let i=bi(r);return i?Dl(n,i,e):!1},ki=(n,e,t)=>{let r=Al(n,t);if(!r)return!1;let i=xi(r);return i?Dl(n,i,e):!1};function Dl(n,e,t){let r=e.nodeBefore,i=r,o=e.pos-1;for(;!i.isTextblock;o--){if(i.type.spec.isolating)return!1;let d=i.lastChild;if(!d)return!1;i=d}let s=e.nodeAfter,l=s,a=e.pos+1;for(;!l.isTextblock;a++){if(l.type.spec.isolating)return!1;let d=l.firstChild;if(!d)return!1;l=d}let c=ht(n.doc,o,a,b.empty);if(!c||c.from!=o||c instanceof V&&c.slice.size>=a-o)return!1;if(t){let d=n.tr.step(c);d.setSelection(T.create(d.doc,o)),t(d.scrollIntoView())}return!0}function Mt(n,e,t=!1){for(let r=n;r;r=e=="start"?r.firstChild:r.lastChild){if(r.isTextblock)return!0;if(t&&r.childCount!=1)return!1}return!1}var _n=(n,e,t)=>{let{$head:r,empty:i}=n.selection,o=r;if(!i)return!1;if(r.parent.isTextblock){if(t?!t.endOfTextblock("backward",n):r.parentOffset>0)return!1;o=bi(r)}let s=o&&o.nodeBefore;return!s||!S.isSelectable(s)?!1:(e&&e(n.tr.setSelection(S.create(n.doc,o.pos-s.nodeSize)).scrollIntoView()),!0)};function bi(n){if(!n.parent.type.spec.isolating)for(let e=n.depth-1;e>=0;e--){if(n.index(e)>0)return n.doc.resolve(n.before(e+1));if(n.node(e).type.spec.isolating)break}return null}function Al(n,e){let{$cursor:t}=n.selection;return!t||(e?!e.endOfTextblock("forward",n):t.parentOffset{let r=Al(n,t);if(!r)return!1;let i=xi(r);if(!i)return!1;let o=i.nodeAfter;if(Il(n,i,e,1))return!0;if(r.parent.content.size==0&&(Mt(o,"start")||S.isSelectable(o))){let s=ht(n.doc,r.before(),r.after(),b.empty);if(s&&s.slice.size{let{$head:r,empty:i}=n.selection,o=r;if(!i)return!1;if(r.parent.isTextblock){if(t?!t.endOfTextblock("forward",n):r.parentOffset=0;e--){let t=n.node(e);if(n.index(e)+1{let t=n.selection,r=t instanceof S,i;if(r){if(t.node.isTextblock||!re(n.doc,t.from))return!1;i=t.from}else if(i=Ue(n.doc,t.from,-1),i==null)return!1;if(e){let o=n.tr.join(i);r&&o.setSelection(S.create(o.doc,i-n.doc.resolve(i).nodeBefore.nodeSize)),e(o.scrollIntoView())}return!0},Ci=(n,e)=>{let t=n.selection,r;if(t instanceof S){if(t.node.isTextblock||!re(n.doc,t.to))return!1;r=t.to}else if(r=Ue(n.doc,t.to,1),r==null)return!1;return e&&e(n.tr.join(r).scrollIntoView()),!0},wi=(n,e)=>{let{$from:t,$to:r}=n.selection,i=t.blockRange(r),o=i&&me(i);return o==null?!1:(e&&e(n.tr.lift(i,o).scrollIntoView()),!0)},Fn=(n,e)=>{let{$head:t,$anchor:r}=n.selection;return!t.parent.type.spec.code||!t.sameParent(r)?!1:(e&&e(n.tr.insertText(` -`).scrollIntoView()),!0)};function Mi(n){for(let e=0;e{let{$head:t,$anchor:r}=n.selection;if(!t.parent.type.spec.code||!t.sameParent(r))return!1;let i=t.node(-1),o=t.indexAfter(-1),s=Mi(i.contentMatchAt(o));if(!s||!i.canReplaceWith(o,o,s))return!1;if(e){let l=t.after(),a=n.tr.replaceWith(l,l,s.createAndFill());a.setSelection(E.near(a.doc.resolve(l),1)),e(a.scrollIntoView())}return!0},Vn=(n,e)=>{let t=n.selection,{$from:r,$to:i}=t;if(t instanceof q||r.parent.inlineContent||i.parent.inlineContent)return!1;let o=Mi(i.parent.contentMatchAt(i.indexAfter()));if(!o||!o.isTextblock)return!1;if(e){let s=(!r.parentOffset&&i.index(){let{$cursor:t}=n.selection;if(!t||t.parent.content.size)return!1;if(t.depth>1&&t.after()!=t.end(-1)){let o=t.before();if(ee(n.doc,o))return e&&e(n.tr.split(o).scrollIntoView()),!0}let r=t.blockRange(),i=r&&me(r);return i==null?!1:(e&&e(n.tr.lift(r,i).scrollIntoView()),!0)};function vl(n){return(e,t)=>{let{$from:r,$to:i}=e.selection;if(e.selection instanceof S&&e.selection.node.isBlock)return!r.parentOffset||!ee(e.doc,r.pos)?!1:(t&&t(e.tr.split(r.pos).scrollIntoView()),!0);if(!r.depth)return!1;let o=[],s,l,a=!1,c=!1;for(let p=r.depth;;p--)if(r.node(p).isBlock){a=r.end(p)==r.pos+(r.depth-p),c=r.start(p)==r.pos-(r.depth-p),l=Mi(r.node(p-1).contentMatchAt(r.indexAfter(p-1)));let m=n&&n(i.parent,a,r);o.unshift(m||(a&&l?{type:l}:null)),s=p;break}else{if(p==1)return!1;o.unshift(null)}let d=e.tr;(e.selection instanceof T||e.selection instanceof q)&&d.deleteSelection();let u=d.mapping.map(r.pos),f=ee(d.doc,u,o.length,o);if(f||(o[0]=l?{type:l}:null,f=ee(d.doc,u,o.length,o)),!f)return!1;if(d.split(u,o.length,o),!a&&c&&r.node(s).type!=l){let p=d.mapping.map(r.before(s)),h=d.doc.resolve(p);l&&r.node(s-1).canReplaceWith(h.index(),h.index()+1,l)&&d.setNodeMarkup(d.mapping.map(r.before(s)),l)}return t&&t(d.scrollIntoView()),!0}}var Ei=vl(),uu=(n,e)=>Ei(n,e&&(t=>{let r=n.storedMarks||n.selection.$to.parentOffset&&n.selection.$from.marks();r&&t.ensureMarks(r),e(t)})),Oi=(n,e)=>{let{$from:t,to:r}=n.selection,i,o=t.sharedDepth(r);return o==0?!1:(i=t.before(o),e&&e(n.tr.setSelection(S.create(n.doc,i))),!0)},Rl=(n,e)=>(e&&e(n.tr.setSelection(new q(n.doc))),!0);function fu(n,e,t){let r=e.nodeBefore,i=e.nodeAfter,o=e.index();return!r||!i||!r.type.compatibleContent(i.type)?!1:!r.content.size&&e.parent.canReplace(o-1,o)?(t&&t(n.tr.delete(e.pos-r.nodeSize,e.pos).scrollIntoView()),!0):!e.parent.canReplace(o,o+1)||!(i.isTextblock||re(n.doc,e.pos))?!1:(t&&t(n.tr.join(e.pos).scrollIntoView()),!0)}function Il(n,e,t,r){let i=e.nodeBefore,o=e.nodeAfter,s,l,a=i.type.spec.isolating||o.type.spec.isolating;if(!a&&fu(n,e,t))return!0;let c=!a&&e.parent.canReplace(e.index(),e.index()+1);if(c&&(s=(l=i.contentMatchAt(i.childCount)).findWrapping(o.type))&&l.matchType(s[0]||o.type).validEnd){if(t){let p=e.pos+o.nodeSize,h=k.empty;for(let y=s.length-1;y>=0;y--)h=k.from(s[y].create(null,h));h=k.from(i.copy(h));let m=n.tr.step(new I(e.pos-1,p,e.pos,p,new b(h,1,0),s.length,!0)),g=m.doc.resolve(p+2*s.length);g.nodeAfter&&g.nodeAfter.type==i.type&&re(m.doc,g.pos)&&m.join(g.pos),t(m.scrollIntoView())}return!0}let d=o.type.spec.isolating||r>0&&a?null:E.findFrom(e,1),u=d&&d.$from.blockRange(d.$to),f=u&&me(u);if(f!=null&&f>=e.depth)return t&&t(n.tr.lift(u,f).scrollIntoView()),!0;if(c&&Mt(o,"start",!0)&&Mt(i,"end")){let p=i,h=[];for(;h.push(p),!p.isTextblock;)p=p.lastChild;let m=o,g=1;for(;!m.isTextblock;m=m.firstChild)g++;if(p.canReplace(p.childCount,p.childCount,m.content)){if(t){let y=k.empty;for(let M=h.length-1;M>=0;M--)y=k.from(h[M].copy(y));let w=n.tr.step(new I(e.pos-h.length,e.pos+o.nodeSize,e.pos+g,e.pos+o.nodeSize-g,new b(y,h.length,0),0,!0));t(w.scrollIntoView())}return!0}}return!1}function Pl(n){return function(e,t){let r=e.selection,i=n<0?r.$from:r.$to,o=i.depth;for(;i.node(o).isInline;){if(!o)return!1;o--}return i.node(o).isTextblock?(t&&t(e.tr.setSelection(T.create(e.doc,n<0?i.start(o):i.end(o)))),!0):!1}}var jn=Pl(-1),Wn=Pl(1);function Ti(n,e=null){return function(t,r){let{$from:i,$to:o}=t.selection,s=i.blockRange(o),l=s&&qe(s,n,e);return l?(r&&r(t.tr.wrap(s,l).scrollIntoView()),!0):!1}}function Kn(n,e=null){return function(t,r){let i=!1;for(let o=0;o{if(i)return!1;if(!(!a.isTextblock||a.hasMarkup(n,e)))if(a.type==n)i=!0;else{let d=t.doc.resolve(c),u=d.index();i=d.parent.canReplaceWith(u,u+1,n)}})}if(!i)return!1;if(r){let o=t.tr;for(let s=0;s{if(l||!r&&a.isAtom&&a.isInline&&c>=o.pos&&c+a.nodeSize<=s.pos)return!1;l=a.inlineContent&&a.type.allowsMarkType(t)}),l)return!0}return!1}function hu(n){let e=[];for(let t=0;t{if(o.isAtom&&o.content.size&&o.isInline&&s>=r.pos&&s+o.nodeSize<=i.pos)return s+1>r.pos&&e.push(new Ye(r,r.doc.resolve(s+1))),r=r.doc.resolve(s+1+o.content.size),!1}),r.poss.doc.rangeHasMark(p.$from.pos,p.$to.pos,n)):u=!d.every(p=>{let h=!1;return f.doc.nodesBetween(p.$from.pos,p.$to.pos,(m,g,y)=>{if(h)return!1;h=!n.isInSet(m.marks)&&!!y&&y.type.allowsMarkType(n)&&!(m.isText&&/^\s*$/.test(m.textBetween(Math.max(0,p.$from.pos-g),Math.min(m.nodeSize,p.$to.pos-g))))}),!h});for(let p=0;p{if(!t.isGeneric)return n(t);let r=[];for(let o=0;or.push(c,d))}let i=[];for(let o=0;oo-s);for(let o=i.length-1;o>=0;o--)re(t.doc,i[o])&&t.join(i[o]);n(t)}}function yu(n,e){let t=Array.isArray(e)?r=>e.indexOf(r.type.name)>-1:e;return(r,i,o)=>n(r,i&&gu(i,t),o)}function Jn(...n){return function(e,t,r){for(let i=0;iwu,bulletList:()=>Bl,liftListItem:()=>Ri,listItem:()=>zl,orderedList:()=>_l,sinkListItem:()=>Ii,splitListItem:()=>Ll,splitListItemKeepMarks:()=>Eu,wrapInList:()=>vi,wrapRangeInList:()=>Fl});var xu=["ol",0],Su=["ul",0],Cu=["li",0],_l={attrs:{order:{default:1,validate:"number"}},parseDOM:[{tag:"ol",getAttrs(n){return{order:n.hasAttribute("start")?+n.getAttribute("start"):1}}}],toDOM(n){return n.attrs.order==1?xu:["ol",{start:n.attrs.order},0]}},Bl={parseDOM:[{tag:"ul"}],toDOM(){return Su}},zl={parseDOM:[{tag:"li"}],toDOM(){return Cu},defining:!0};function Ai(n,e){let t={};for(let r in n)t[r]=n[r];for(let r in e)t[r]=e[r];return t}function wu(n,e,t){return n.append({ordered_list:Ai(_l,{content:"list_item+",group:t}),bullet_list:Ai(Bl,{content:"list_item+",group:t}),list_item:Ai(zl,{content:e})})}function vi(n,e=null){return function(t,r){let{$from:i,$to:o}=t.selection,s=i.blockRange(o);if(!s)return!1;let l=r?t.tr:null;return Fl(l,s,n,e)?(r&&r(l.scrollIntoView()),!0):!1}}function Fl(n,e,t,r=null){let i=!1,o=e,s=e.$from.doc;if(e.depth>=2&&e.$from.node(e.depth-1).type.compatibleContent(t)&&e.startIndex==0){if(e.$from.index(e.depth-1)==0)return!1;let a=s.resolve(e.start-2);o=new Re(a,a,e.depth),e.endIndex=0;d--)o=k.from(t[d].type.create(t[d].attrs,o));n.step(new I(e.start-(r?2:0),e.end,e.start,e.end,new b(o,0,0),t.length,!0));let s=0;for(let d=0;d=i.depth-3;y--)u=k.from(i.node(y).copy(u));let p=i.indexAfter(-1){if(g>-1)return!1;y.isTextblock&&y.content.size==0&&(g=w+1)}),g>-1&&m.setSelection(E.near(m.doc.resolve(g))),r(m.scrollIntoView())}return!0}let a=o.pos==i.end()?l.contentMatchAt(0).defaultType:null,c=t.tr.delete(i.pos,o.pos),d=a?[e?{type:n,attrs:e}:null,{type:a}]:void 0;return ee(c.doc,i.pos,2,d)?(r&&r(c.split(i.pos,2,d).scrollIntoView()),!0):!1}}function Eu(n,e){let t=Ll(n,e);return(r,i)=>t(r,i&&(o=>{let s=r.storedMarks||r.selection.$to.parentOffset&&r.selection.$from.marks();s&&o.ensureMarks(s),i(o)}))}function Ri(n){return function(e,t){let{$from:r,$to:i}=e.selection,o=r.blockRange(i,s=>s.childCount>0&&s.firstChild.type==n);return o?t?r.node(o.depth-1).type==n?Ou(e,t,n,o):Tu(e,t,o):!0:!1}}function Ou(n,e,t,r){let i=n.tr,o=r.end,s=r.$to.end(r.depth);om;h--)p-=i.child(h).nodeSize,r.delete(p-1,p+1);let o=r.doc.resolve(t.start),s=o.nodeAfter;if(r.mapping.map(t.end)!=t.start+o.nodeAfter.nodeSize)return!1;let l=t.startIndex==0,a=t.endIndex==i.childCount,c=o.node(-1),d=o.index(-1);if(!c.canReplace(d+(l?0:1),d+1,s.content.append(a?k.empty:k.from(i))))return!1;let u=o.pos,f=u+s.nodeSize;return r.step(new I(u-(l?1:0),f+(a?1:0),u+1,f-1,new b((l?k.empty:k.from(i.copy(k.empty))).append(a?k.empty:k.from(i.copy(k.empty))),l?0:1,a?0:1),l?0:1)),e(r.scrollIntoView()),!0}function Ii(n){return function(e,t){let{$from:r,$to:i}=e.selection,o=r.blockRange(i,c=>c.childCount>0&&c.firstChild.type==n);if(!o)return!1;let s=o.startIndex;if(s==0)return!1;let l=o.parent,a=l.child(s-1);if(a.type!=n)return!1;if(t){let c=a.lastChild&&a.lastChild.type==l.type,d=k.from(c?n.create():null),u=new b(k.from(n.create(null,k.from(l.type.create(null,d)))),c?3:1,0),f=o.start,p=o.end;t(e.tr.step(new I(f-(c?3:1),p,f,p,u,1,!0)).scrollIntoView())}return!0}}function nn(n){let{state:e,transaction:t}=n,{selection:r}=t,{doc:i}=t,{storedMarks:o}=t;return{...e,apply:e.apply.bind(e),applyTransaction:e.applyTransaction.bind(e),plugins:e.plugins,schema:e.schema,reconfigure:e.reconfigure.bind(e),toJSON:e.toJSON.bind(e),get storedMarks(){return o},get selection(){return r},get doc(){return i},get tr(){return r=t.selection,i=t.doc,o=t.storedMarks,t}}}var ot=class{constructor(e){this.editor=e.editor,this.rawCommands=this.editor.extensionManager.commands,this.customState=e.state}get hasCustomState(){return!!this.customState}get state(){return this.customState||this.editor.state}get commands(){let{rawCommands:e,editor:t,state:r}=this,{view:i}=t,{tr:o}=r,s=this.buildProps(o);return Object.fromEntries(Object.entries(e).map(([l,a])=>[l,(...d)=>{let u=a(...d)(s);return!o.getMeta("preventDispatch")&&!this.hasCustomState&&i.dispatch(o),u}]))}get chain(){return()=>this.createChain()}get can(){return()=>this.createCan()}createChain(e,t=!0){let{rawCommands:r,editor:i,state:o}=this,{view:s}=i,l=[],a=!!e,c=e||o.tr,d=()=>(!a&&t&&!c.getMeta("preventDispatch")&&!this.hasCustomState&&s.dispatch(c),l.every(f=>f===!0)),u={...Object.fromEntries(Object.entries(r).map(([f,p])=>[f,(...m)=>{let g=this.buildProps(c,t),y=p(...m)(g);return l.push(y),u}])),run:d};return u}createCan(e){let{rawCommands:t,state:r}=this,i=!1,o=e||r.tr,s=this.buildProps(o,i);return{...Object.fromEntries(Object.entries(t).map(([a,c])=>[a,(...d)=>c(...d)({...s,dispatch:void 0})])),chain:()=>this.createChain(o,i)}}buildProps(e,t=!0){let{rawCommands:r,editor:i,state:o}=this,{view:s}=i,l={tr:e,editor:i,view:s,state:nn({state:o,transaction:e}),dispatch:t?()=>{}:void 0,chain:()=>this.createChain(e,t),can:()=>this.createCan(e),get commands(){return Object.fromEntries(Object.entries(r).map(([a,c])=>[a,(...d)=>c(...d)(l)]))}};return l}},zi=class{constructor(){this.callbacks={}}on(e,t){return this.callbacks[e]||(this.callbacks[e]=[]),this.callbacks[e].push(t),this}emit(e,...t){let r=this.callbacks[e];return r&&r.forEach(i=>i.apply(this,t)),this}off(e,t){let r=this.callbacks[e];return r&&(t?this.callbacks[e]=r.filter(i=>i!==t):delete this.callbacks[e]),this}once(e,t){let r=(...i)=>{this.off(e,r),t.apply(this,i)};return this.on(e,r)}removeAllListeners(){this.callbacks={}}};function x(n,e,t){return n.config[e]===void 0&&n.parent?x(n.parent,e,t):typeof n.config[e]=="function"?n.config[e].bind({...t,parent:n.parent?x(n.parent,e,t):null}):n.config[e]}function rn(n){let e=n.filter(i=>i.type==="extension"),t=n.filter(i=>i.type==="node"),r=n.filter(i=>i.type==="mark");return{baseExtensions:e,nodeExtensions:t,markExtensions:r}}function qi(n){let e=[],{nodeExtensions:t,markExtensions:r}=rn(n),i=[...t,...r],o={default:null,rendered:!0,renderHTML:null,parseHTML:null,keepOnSplit:!0,isRequired:!1};return n.forEach(s=>{let l={name:s.name,options:s.options,storage:s.storage,extensions:i},a=x(s,"addGlobalAttributes",l);if(!a)return;a().forEach(d=>{d.types.forEach(u=>{Object.entries(d.attributes).forEach(([f,p])=>{e.push({type:u,name:f,attribute:{...o,...p}})})})})}),i.forEach(s=>{let l={name:s.name,options:s.options,storage:s.storage},a=x(s,"addAttributes",l);if(!a)return;let c=a();Object.entries(c).forEach(([d,u])=>{let f={...o,...u};typeof f?.default=="function"&&(f.default=f.default()),f?.isRequired&&f?.default===void 0&&delete f.default,e.push({type:s.name,name:d,attribute:f})})}),e}function F(n,e){if(typeof n=="string"){if(!e.nodes[n])throw Error(`There is no node type named '${n}'. Maybe you forgot to add the extension?`);return e.nodes[n]}return n}function Wl(...n){return n.filter(e=>!!e).reduce((e,t)=>{let r={...e};return Object.entries(t).forEach(([i,o])=>{if(!r[i]){r[i]=o;return}if(i==="class"){let l=o?String(o).split(" "):[],a=r[i]?r[i].split(" "):[],c=l.filter(d=>!a.includes(d));r[i]=[...a,...c].join(" ")}else if(i==="style"){let l=o?o.split(";").map(d=>d.trim()).filter(Boolean):[],a=r[i]?r[i].split(";").map(d=>d.trim()).filter(Boolean):[],c=new Map;a.forEach(d=>{let[u,f]=d.split(":").map(p=>p.trim());c.set(u,f)}),l.forEach(d=>{let[u,f]=d.split(":").map(p=>p.trim());c.set(u,f)}),r[i]=Array.from(c.entries()).map(([d,u])=>`${d}: ${u}`).join("; ")}else r[i]=o}),r},{})}function Gn(n,e){return e.filter(t=>t.type===n.type.name).filter(t=>t.attribute.rendered).map(t=>t.attribute.renderHTML?t.attribute.renderHTML(n.attrs)||{}:{[t.name]:n.attrs[t.name]}).reduce((t,r)=>Wl(t,r),{})}function Ui(n){return typeof n=="function"}function N(n,e=void 0,...t){return Ui(n)?e?n.bind(e)(...t):n(...t):n}function Kl(n={}){return Object.keys(n).length===0&&n.constructor===Object}function Jl(n){return typeof n!="string"?n:n.match(/^[+-]?(?:\d*\.)?\d+$/)?Number(n):n==="true"?!0:n==="false"?!1:n}function Fi(n,e){return"style"in n?n:{...n,getAttrs:t=>{let r=n.getAttrs?n.getAttrs(t):n.attrs;if(r===!1)return!1;let i=e.reduce((o,s)=>{let l=s.attribute.parseHTML?s.attribute.parseHTML(t):Jl(t.getAttribute(s.name));return l==null?o:{...o,[s.name]:l}},{});return{...r,...i}}}}function Vl(n){return Object.fromEntries(Object.entries(n).filter(([e,t])=>e==="attrs"&&Kl(t)?!1:t!=null))}function Gi(n,e){var t;let r=qi(n),{nodeExtensions:i,markExtensions:o}=rn(n),s=(t=i.find(c=>x(c,"topNode")))===null||t===void 0?void 0:t.name,l=Object.fromEntries(i.map(c=>{let d=r.filter(y=>y.type===c.name),u={name:c.name,options:c.options,storage:c.storage,editor:e},f=n.reduce((y,w)=>{let M=x(w,"extendNodeSchema",u);return{...y,...M?M(c):{}}},{}),p=Vl({...f,content:N(x(c,"content",u)),marks:N(x(c,"marks",u)),group:N(x(c,"group",u)),inline:N(x(c,"inline",u)),atom:N(x(c,"atom",u)),selectable:N(x(c,"selectable",u)),draggable:N(x(c,"draggable",u)),code:N(x(c,"code",u)),whitespace:N(x(c,"whitespace",u)),linebreakReplacement:N(x(c,"linebreakReplacement",u)),defining:N(x(c,"defining",u)),isolating:N(x(c,"isolating",u)),attrs:Object.fromEntries(d.map(y=>{var w;return[y.name,{default:(w=y?.attribute)===null||w===void 0?void 0:w.default}]}))}),h=N(x(c,"parseHTML",u));h&&(p.parseDOM=h.map(y=>Fi(y,d)));let m=x(c,"renderHTML",u);m&&(p.toDOM=y=>m({node:y,HTMLAttributes:Gn(y,d)}));let g=x(c,"renderText",u);return g&&(p.toText=g),[c.name,p]})),a=Object.fromEntries(o.map(c=>{let d=r.filter(g=>g.type===c.name),u={name:c.name,options:c.options,storage:c.storage,editor:e},f=n.reduce((g,y)=>{let w=x(y,"extendMarkSchema",u);return{...g,...w?w(c):{}}},{}),p=Vl({...f,inclusive:N(x(c,"inclusive",u)),excludes:N(x(c,"excludes",u)),group:N(x(c,"group",u)),spanning:N(x(c,"spanning",u)),code:N(x(c,"code",u)),attrs:Object.fromEntries(d.map(g=>{var y;return[g.name,{default:(y=g?.attribute)===null||y===void 0?void 0:y.default}]}))}),h=N(x(c,"parseHTML",u));h&&(p.parseDOM=h.map(g=>Fi(g,d)));let m=x(c,"renderHTML",u);return m&&(p.toDOM=g=>m({mark:g,HTMLAttributes:Gn(g,d)})),[c.name,p]}));return new ct({topNode:s,nodes:l,marks:a})}function Un(n,e){return e.nodes[n]||e.marks[n]||null}function Li(n,e){return Array.isArray(e)?e.some(t=>(typeof t=="string"?t:t.name)===n.name):e}function on(n,e){let t=pe.fromSchema(e).serializeFragment(n),i=document.implementation.createHTMLDocument().createElement("div");return i.appendChild(t),i.innerHTML}var Hl=(n,e=500)=>{let t="",r=n.parentOffset;return n.parent.nodesBetween(Math.max(0,r-e),r,(i,o,s,l)=>{var a,c;let d=((c=(a=i.type.spec).toText)===null||c===void 0?void 0:c.call(a,{node:i,pos:o,parent:s,index:l}))||i.textContent||"%leaf%";t+=i.isAtom&&!i.isText?d:d.slice(0,Math.max(0,r-o))}),t};function tr(n){return Object.prototype.toString.call(n)==="[object RegExp]"}var $e=class{constructor(e){this.find=e.find,this.handler=e.handler}},Nu=(n,e)=>{if(tr(e))return e.exec(n);let t=e(n);if(!t)return null;let r=[t.text];return r.index=t.index,r.input=n,r.data=t.data,t.replaceWith&&(t.text.includes(t.replaceWith)||console.warn('[tiptap warn]: "inputRuleMatch.replaceWith" must be part of "inputRuleMatch.text".'),r.push(t.replaceWith)),r};function Hn(n){var e;let{editor:t,from:r,to:i,text:o,rules:s,plugin:l}=n,{view:a}=t;if(a.composing)return!1;let c=a.state.doc.resolve(r);if(c.parent.type.spec.code||!((e=c.nodeBefore||c.nodeAfter)===null||e===void 0)&&e.marks.find(f=>f.type.spec.code))return!1;let d=!1,u=Hl(c)+o;return s.forEach(f=>{if(d)return;let p=Nu(u,f.find);if(!p)return;let h=a.state.tr,m=nn({state:a.state,transaction:h}),g={from:r-(p[0].length-o.length),to:i},{commands:y,chain:w,can:M}=new ot({editor:t,state:m});f.handler({state:m,range:g,match:p,commands:y,chain:w,can:M})===null||!h.steps.length||(h.setMeta(l,{transform:h,from:r,to:i,text:o}),a.dispatch(h),d=!0)}),d}function ql(n){let{editor:e,rules:t}=n,r=new P({state:{init(){return null},apply(i,o,s){let l=i.getMeta(r);if(l)return l;let a=i.getMeta("applyInputRules");return a&&setTimeout(()=>{let{text:d}=a;typeof d=="string"?d=d:d=on(k.from(d),s.schema);let{from:u}=a,f=u+d.length;Hn({editor:e,from:u,to:f,text:d,rules:t,plugin:r})}),i.selectionSet||i.docChanged?null:o}},props:{handleTextInput(i,o,s,l){return Hn({editor:e,from:o,to:s,text:l,rules:t,plugin:r})},handleDOMEvents:{compositionend:i=>(setTimeout(()=>{let{$cursor:o}=i.state.selection;o&&Hn({editor:e,from:o.pos,to:o.pos,text:"",rules:t,plugin:r})}),!1)},handleKeyDown(i,o){if(o.key!=="Enter")return!1;let{$cursor:s}=i.state.selection;return s?Hn({editor:e,from:s.pos,to:s.pos,text:` -`,rules:t,plugin:r}):!1}},isInputRules:!0});return r}function Du(n){return Object.prototype.toString.call(n).slice(8,-1)}function Qt(n){return Du(n)!=="Object"?!1:n.constructor===Object&&Object.getPrototypeOf(n)===Object.prototype}function sn(n,e){let t={...n};return Qt(n)&&Qt(e)&&Object.keys(e).forEach(r=>{Qt(e[r])&&Qt(n[r])?t[r]=sn(n[r],e[r]):t[r]=e[r]}),t}var Yn=class n{constructor(e={}){this.type="mark",this.name="mark",this.parent=null,this.child=null,this.config={name:this.name,defaultOptions:{}},this.config={...this.config,...e},this.name=this.config.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`),this.options=this.config.defaultOptions,this.config.addOptions&&(this.options=N(x(this,"addOptions",{name:this.name}))),this.storage=N(x(this,"addStorage",{name:this.name,options:this.options}))||{}}static create(e={}){return new n(e)}configure(e={}){let t=this.extend({...this.config,addOptions:()=>sn(this.options,e)});return t.name=this.name,t.parent=this.parent,t}extend(e={}){let t=new n(e);return t.parent=this,this.child=t,t.name=e.name?e.name:t.parent.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${t.name}".`),t.options=N(x(t,"addOptions",{name:t.name})),t.storage=N(x(t,"addStorage",{name:t.name,options:t.options})),t}static handleExit({editor:e,mark:t}){let{tr:r}=e.state,i=e.state.selection.$from;if(i.pos===i.end()){let s=i.marks();if(!!!s.find(c=>c?.type.name===t.name))return!1;let a=s.find(c=>c?.type.name===t.name);return a&&r.removeStoredMark(a),r.insertText(" ",i.pos),e.view.dispatch(r),!0}return!1}};function Ul(n){return typeof n=="number"}var Ot=class{constructor(e){this.find=e.find,this.handler=e.handler}},Au=(n,e,t)=>{if(tr(e))return[...n.matchAll(e)];let r=e(n,t);return r?r.map(i=>{let o=[i.text];return o.index=i.index,o.input=n,o.data=i.data,i.replaceWith&&(i.text.includes(i.replaceWith)||console.warn('[tiptap warn]: "pasteRuleMatch.replaceWith" must be part of "pasteRuleMatch.text".'),o.push(i.replaceWith)),o}):[]};function vu(n){let{editor:e,state:t,from:r,to:i,rule:o,pasteEvent:s,dropEvent:l}=n,{commands:a,chain:c,can:d}=new ot({editor:e,state:t}),u=[];return t.doc.nodesBetween(r,i,(p,h)=>{if(!p.isTextblock||p.type.spec.code)return;let m=Math.max(r,h),g=Math.min(i,h+p.content.size),y=p.textBetween(m-h,g-h,void 0,"\uFFFC");Au(y,o.find,s).forEach(M=>{if(M.index===void 0)return;let A=m+M.index+1,v=A+M[0].length,B={from:t.tr.mapping.map(A),to:t.tr.mapping.map(v)},O=o.handler({state:t,range:B,match:M,commands:a,chain:c,can:d,pasteEvent:s,dropEvent:l});u.push(O)})}),u.every(p=>p!==null)}var qn=null,Ru=n=>{var e;let t=new ClipboardEvent("paste",{clipboardData:new DataTransfer});return(e=t.clipboardData)===null||e===void 0||e.setData("text/html",n),t};function Gl(n){let{editor:e,rules:t}=n,r=null,i=!1,o=!1,s=typeof ClipboardEvent<"u"?new ClipboardEvent("paste"):null,l;try{l=typeof DragEvent<"u"?new DragEvent("drop"):null}catch{l=null}let a=({state:d,from:u,to:f,rule:p,pasteEvt:h})=>{let m=d.tr,g=nn({state:d,transaction:m});if(!(!vu({editor:e,state:g,from:Math.max(u-1,0),to:f.b-1,rule:p,pasteEvent:h,dropEvent:l})||!m.steps.length)){try{l=typeof DragEvent<"u"?new DragEvent("drop"):null}catch{l=null}return s=typeof ClipboardEvent<"u"?new ClipboardEvent("paste"):null,m}};return t.map(d=>new P({view(u){let f=h=>{var m;r=!((m=u.dom.parentElement)===null||m===void 0)&&m.contains(h.target)?u.dom.parentElement:null,r&&(qn=e)},p=()=>{qn&&(qn=null)};return window.addEventListener("dragstart",f),window.addEventListener("dragend",p),{destroy(){window.removeEventListener("dragstart",f),window.removeEventListener("dragend",p)}}},props:{handleDOMEvents:{drop:(u,f)=>{if(o=r===u.dom.parentElement,l=f,!o){let p=qn;p?.isEditable&&setTimeout(()=>{let h=p.state.selection;h&&p.commands.deleteRange({from:h.from,to:h.to})},10)}return!1},paste:(u,f)=>{var p;let h=(p=f.clipboardData)===null||p===void 0?void 0:p.getData("text/html");return s=f,i=!!h?.includes("data-pm-slice"),!1}}},appendTransaction:(u,f,p)=>{let h=u[0],m=h.getMeta("uiEvent")==="paste"&&!i,g=h.getMeta("uiEvent")==="drop"&&!o,y=h.getMeta("applyPasteRules"),w=!!y;if(!m&&!g&&!w)return;if(w){let{text:v}=y;typeof v=="string"?v=v:v=on(k.from(v),p.schema);let{from:B}=y,O=B+v.length,R=Ru(v);return a({rule:d,state:p,from:B,to:{b:O},pasteEvt:R})}let M=f.doc.content.findDiffStart(p.doc.content),A=f.doc.content.findDiffEnd(p.doc.content);if(!(!Ul(M)||!A||M===A.b))return a({rule:d,state:p,from:M,to:A,pasteEvt:s})}}))}function Yl(n){let e=n.filter((t,r)=>n.indexOf(t)!==r);return Array.from(new Set(e))}var Xn=class n{constructor(e,t){this.splittableMarks=[],this.editor=t,this.extensions=n.resolve(e),this.schema=Gi(this.extensions,t),this.setupExtensions()}static resolve(e){let t=n.sort(n.flatten(e)),r=Yl(t.map(i=>i.name));return r.length&&console.warn(`[tiptap warn]: Duplicate extension names found: [${r.map(i=>`'${i}'`).join(", ")}]. This can lead to issues.`),t}static flatten(e){return e.map(t=>{let r={name:t.name,options:t.options,storage:t.storage},i=x(t,"addExtensions",r);return i?[t,...this.flatten(i())]:t}).flat(10)}static sort(e){return e.sort((r,i)=>{let o=x(r,"priority")||100,s=x(i,"priority")||100;return o>s?-1:o{let r={name:t.name,options:t.options,storage:t.storage,editor:this.editor,type:Un(t.name,this.schema)},i=x(t,"addCommands",r);return i?{...e,...i()}:e},{})}get plugins(){let{editor:e}=this,t=n.sort([...this.extensions].reverse()),r=[],i=[],o=t.map(s=>{let l={name:s.name,options:s.options,storage:s.storage,editor:e,type:Un(s.name,this.schema)},a=[],c=x(s,"addKeyboardShortcuts",l),d={};if(s.type==="mark"&&x(s,"exitable",l)&&(d.ArrowRight=()=>Yn.handleExit({editor:e,mark:s})),c){let m=Object.fromEntries(Object.entries(c()).map(([g,y])=>[g,()=>y({editor:e})]));d={...d,...m}}let u=fi(d);a.push(u);let f=x(s,"addInputRules",l);Li(s,e.options.enableInputRules)&&f&&r.push(...f());let p=x(s,"addPasteRules",l);Li(s,e.options.enablePasteRules)&&p&&i.push(...p());let h=x(s,"addProseMirrorPlugins",l);if(h){let m=h();a.push(...m)}return a}).flat();return[ql({editor:e,rules:r}),...Gl({editor:e,rules:i}),...o]}get attributes(){return qi(this.extensions)}get nodeViews(){let{editor:e}=this,{nodeExtensions:t}=rn(this.extensions);return Object.fromEntries(t.filter(r=>!!x(r,"addNodeView")).map(r=>{let i=this.attributes.filter(a=>a.type===r.name),o={name:r.name,options:r.options,storage:r.storage,editor:e,type:F(r.name,this.schema)},s=x(r,"addNodeView",o);if(!s)return[];let l=(a,c,d,u,f)=>{let p=Gn(a,i);return s()({node:a,view:c,getPos:d,decorations:u,innerDecorations:f,editor:e,extension:r,HTMLAttributes:p})};return[r.name,l]}))}setupExtensions(){this.extensions.forEach(e=>{var t;this.editor.extensionStorage[e.name]=e.storage;let r={name:e.name,options:e.options,storage:e.storage,editor:this.editor,type:Un(e.name,this.schema)};e.type==="mark"&&(!((t=N(x(e,"keepOnSplit",r)))!==null&&t!==void 0)||t)&&this.splittableMarks.push(e.name);let i=x(e,"onBeforeCreate",r),o=x(e,"onCreate",r),s=x(e,"onUpdate",r),l=x(e,"onSelectionUpdate",r),a=x(e,"onTransaction",r),c=x(e,"onFocus",r),d=x(e,"onBlur",r),u=x(e,"onDestroy",r);i&&this.editor.on("beforeCreate",i),o&&this.editor.on("create",o),s&&this.editor.on("update",s),l&&this.editor.on("selectionUpdate",l),a&&this.editor.on("transaction",a),c&&this.editor.on("focus",c),d&&this.editor.on("blur",d),u&&this.editor.on("destroy",u)})}},ue=class n{constructor(e={}){this.type="extension",this.name="extension",this.parent=null,this.child=null,this.config={name:this.name,defaultOptions:{}},this.config={...this.config,...e},this.name=this.config.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`),this.options=this.config.defaultOptions,this.config.addOptions&&(this.options=N(x(this,"addOptions",{name:this.name}))),this.storage=N(x(this,"addStorage",{name:this.name,options:this.options}))||{}}static create(e={}){return new n(e)}configure(e={}){let t=this.extend({...this.config,addOptions:()=>sn(this.options,e)});return t.name=this.name,t.parent=this.parent,t}extend(e={}){let t=new n({...this.config,...e});return t.parent=this,this.child=t,t.name=e.name?e.name:t.parent.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${t.name}".`),t.options=N(x(t,"addOptions",{name:t.name})),t.storage=N(x(t,"addStorage",{name:t.name,options:t.options})),t}};function Yi(n,e,t){let{from:r,to:i}=e,{blockSeparator:o=` +`);return{dom:a,text:u,slice:e}}function Ao(n,e,t,r,o){let i=o.parent.type.spec.code,s,l;if(!t&&!e)return null;let a=!!e&&(r||i||!t);if(a){if(n.someProp("transformPastedText",u=>{e=u(e,i||r,n)}),i)return l=new k(b.from(n.state.schema.text(e.replace(/\r\n?/g,` +`))),0,0),n.someProp("transformPasted",u=>{l=u(l,n,!0)}),l;let f=n.someProp("clipboardTextParser",u=>u(e,o,r,n));if(f)l=f;else{let u=o.marks(),{schema:p}=n.state,h=ke.fromSchema(p);s=document.createElement("div"),e.split(/(?:\r\n?|\n)+/).forEach(m=>{let g=s.appendChild(document.createElement("p"));m&&g.appendChild(h.serializeNode(p.text(m,u)))})}}else n.someProp("transformPastedHTML",f=>{t=f(t,n)}),s=Rf(t),fn&&If(s);let c=s&&s.querySelector("[data-pm-slice]"),d=c&&/^(\d+) (\d+)(?: -(\d+))? (.*)/.exec(c.getAttribute("data-pm-slice")||"");if(d&&d[3])for(let f=+d[3];f>0;f--){let u=s.firstChild;for(;u&&u.nodeType!=1;)u=u.nextSibling;if(!u)break;s=u}if(l||(l=(n.someProp("clipboardParser")||n.someProp("domParser")||me.fromSchema(n.state.schema)).parseSlice(s,{preserveWhitespace:!!(a||d),context:o,ruleFromNode(u){return u.nodeName=="BR"&&!u.nextSibling&&u.parentNode&&!Af.test(u.parentNode.nodeName)?{ignore:!0}:null}})),d)l=_f(bl(l,+d[1],+d[2]),d[4]);else if(l=k.maxOpen(vf(l.content,o),!0),l.openStart||l.openEnd){let f=0,u=0;for(let p=l.content.firstChild;f{l=f(l,n,a)}),l}var Af=/^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;function vf(n,e){if(n.childCount<2)return n;for(let t=e.depth;t>=0;t--){let o=e.node(t).contentMatchAt(e.index(t)),i,s=[];if(n.forEach(l=>{if(!s)return;let a=o.findWrapping(l.type),c;if(!a)return s=null;if(c=s.length&&i.length&&Ul(a,i,l,s[s.length-1],0))s[s.length-1]=c;else{s.length&&(s[s.length-1]=Gl(s[s.length-1],i.length));let d=ql(l,a);s.push(d),o=o.matchType(d.type),i=a}}),s)return b.from(s)}return n}function ql(n,e,t=0){for(let r=e.length-1;r>=t;r--)n=e[r].create(null,b.from(n));return n}function Ul(n,e,t,r,o){if(o1&&(i=0),o=t&&(l=e<0?s.contentMatchAt(0).fillBefore(l,i<=o).append(l):l.append(s.contentMatchAt(s.childCount).fillBefore(b.empty,!0))),n.replaceChild(e<0?0:n.childCount-1,s.copy(l))}function bl(n,e,t){return et})),ro.createHTML(n)):n}function Rf(n){let e=/^(\s*]*>)*/.exec(n);e&&(n=n.slice(e[0].length));let t=Xl().createElement("div"),r=/<([a-z][^>\s]+)/i.exec(n),o;if((o=r&&Yl[r[1].toLowerCase()])&&(n=o.map(i=>"<"+i+">").join("")+n+o.map(i=>"").reverse().join("")),t.innerHTML=Df(n),o)for(let i=0;i=0;l-=2){let a=t.nodes[r[l]];if(!a||a.hasRequiredAttrs())break;o=b.from(a.create(r[l+1],o)),i++,s++}return new k(o,i,s)}var ne={},re={},Pf={touchstart:!0,touchmove:!0},ko=class{constructor(){this.shiftKey=!1,this.mouseDown=null,this.lastKeyCode=null,this.lastKeyCodeTime=0,this.lastClick={time:0,x:0,y:0,type:"",button:0},this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastIOSEnter=0,this.lastIOSEnterFallbackTimeout=-1,this.lastFocus=0,this.lastTouch=0,this.lastChromeDelete=0,this.composing=!1,this.compositionNode=null,this.composingTimeout=-1,this.compositionNodes=[],this.compositionEndedAt=-2e8,this.compositionID=1,this.badSafariComposition=!1,this.compositionPendingChanges=0,this.domChangeCount=0,this.eventHandlers=Object.create(null),this.hideSelectionGuard=null}};function Bf(n){for(let e in ne){let t=ne[e];n.dom.addEventListener(e,n.input.eventHandlers[e]=r=>{Ff(n,r)&&!vo(n,r)&&(n.editable||!(r.type in re))&&t(n,r)},Pf[e]?{passive:!0}:void 0)}ee&&n.dom.addEventListener("input",()=>null),xo(n)}function Ue(n,e){n.input.lastSelectionOrigin=e,n.input.lastSelectionTime=Date.now()}function zf(n){n.domObserver.stop();for(let e in n.input.eventHandlers)n.dom.removeEventListener(e,n.input.eventHandlers[e]);clearTimeout(n.input.composingTimeout),clearTimeout(n.input.lastIOSEnterFallbackTimeout)}function xo(n){n.someProp("handleDOMEvents",e=>{for(let t in e)n.input.eventHandlers[t]||n.dom.addEventListener(t,n.input.eventHandlers[t]=r=>vo(n,r))})}function vo(n,e){return n.someProp("handleDOMEvents",t=>{let r=t[e.type];return r?r(n,e)||e.defaultPrevented:!1})}function Ff(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target;t!=n.dom;t=t.parentNode)if(!t||t.nodeType==11||t.pmViewDesc&&t.pmViewDesc.stopEvent(e))return!1;return!0}function Lf(n,e){!vo(n,e)&&ne[e.type]&&(n.editable||!(e.type in re))&&ne[e.type](n,e)}re.keydown=(n,e)=>{let t=e;if(n.input.shiftKey=t.keyCode==16||t.shiftKey,!Ql(n,t)&&(n.input.lastKeyCode=t.keyCode,n.input.lastKeyCodeTime=Date.now(),!(_e&&J&&t.keyCode==13)))if(t.keyCode!=229&&n.domObserver.forceFlush(),Dt&&t.keyCode==13&&!t.ctrlKey&&!t.altKey&&!t.metaKey){let r=Date.now();n.input.lastIOSEnter=r,n.input.lastIOSEnterFallbackTimeout=setTimeout(()=>{n.input.lastIOSEnter==r&&(n.someProp("handleKeyDown",o=>o(n,lt(13,"Enter"))),n.input.lastIOSEnter=0)},200)}else n.someProp("handleKeyDown",r=>r(n,t))||Nf(n,t)?t.preventDefault():Ue(n,"key")};re.keyup=(n,e)=>{e.keyCode==16&&(n.input.shiftKey=!1)};re.keypress=(n,e)=>{let t=e;if(Ql(n,t)||!t.charCode||t.ctrlKey&&!t.altKey||de&&t.metaKey)return;if(n.someProp("handleKeyPress",o=>o(n,t))){t.preventDefault();return}let r=n.state.selection;if(!(r instanceof O)||!r.$from.sameParent(r.$to)){let o=String.fromCharCode(t.charCode),i=()=>n.state.tr.insertText(o).scrollIntoView();!/[\r\n]/.test(o)&&!n.someProp("handleTextInput",s=>s(n,r.$from.pos,r.$to.pos,o,i))&&n.dispatch(i()),t.preventDefault()}};function qn(n){return{left:n.clientX,top:n.clientY}}function $f(n,e){let t=e.x-n.clientX,r=e.y-n.clientY;return t*t+r*r<100}function Do(n,e,t,r,o){if(r==-1)return!1;let i=n.state.doc.resolve(r);for(let s=i.depth+1;s>0;s--)if(n.someProp(e,l=>s>i.depth?l(n,t,i.nodeAfter,i.before(s),o,!0):l(n,t,i.node(s),i.before(s),o,!1)))return!0;return!1}function At(n,e,t){if(n.focused||n.focus(),n.state.selection.eq(e))return;let r=n.state.tr.setSelection(e);t=="pointer"&&r.setMeta("pointer",!0),n.dispatch(r)}function Vf(n,e){if(e==-1)return!1;let t=n.state.doc.resolve(e),r=t.nodeAfter;return r&&r.isAtom&&w.isSelectable(r)?(At(n,new w(t),"pointer"),!0):!1}function jf(n,e){if(e==-1)return!1;let t=n.state.selection,r,o;t instanceof w&&(r=t.node);let i=n.state.doc.resolve(e);for(let s=i.depth+1;s>0;s--){let l=s>i.depth?i.nodeAfter:i.node(s);if(w.isSelectable(l)){r&&t.$from.depth>0&&s>=t.$from.depth&&i.before(t.$from.depth+1)==t.$from.pos?o=i.before(t.$from.depth):o=i.before(s);break}}return o!=null?(At(n,w.create(n.state.doc,o),"pointer"),!0):!1}function Wf(n,e,t,r,o){return Do(n,"handleClickOn",e,t,r)||n.someProp("handleClick",i=>i(n,e,r))||(o?jf(n,t):Vf(n,t))}function Kf(n,e,t,r){return Do(n,"handleDoubleClickOn",e,t,r)||n.someProp("handleDoubleClick",o=>o(n,e,r))}function Hf(n,e,t,r){return Do(n,"handleTripleClickOn",e,t,r)||n.someProp("handleTripleClick",o=>o(n,e,r))||Jf(n,t,r)}function Jf(n,e,t){if(t.button!=0)return!1;let r=n.state.doc;if(e==-1)return r.inlineContent?(At(n,O.create(r,0,r.content.size),"pointer"),!0):!1;let o=r.resolve(e);for(let i=o.depth+1;i>0;i--){let s=i>o.depth?o.nodeAfter:o.node(i),l=o.before(i);if(s.inlineContent)At(n,O.create(r,l+1,l+1+s.content.size),"pointer");else if(w.isSelectable(s))At(n,w.create(r,l),"pointer");else continue;return!0}}function Ro(n){return sn(n)}var Zl=de?"metaKey":"ctrlKey";ne.mousedown=(n,e)=>{let t=e;n.input.shiftKey=t.shiftKey;let r=Ro(n),o=Date.now(),i="singleClick";o-n.input.lastClick.time<500&&$f(t,n.input.lastClick)&&!t[Zl]&&n.input.lastClick.button==t.button&&(n.input.lastClick.type=="singleClick"?i="doubleClick":n.input.lastClick.type=="doubleClick"&&(i="tripleClick")),n.input.lastClick={time:o,x:t.clientX,y:t.clientY,type:i,button:t.button};let s=n.posAtCoords(qn(t));s&&(i=="singleClick"?(n.input.mouseDown&&n.input.mouseDown.done(),n.input.mouseDown=new So(n,s,t,!!r)):(i=="doubleClick"?Kf:Hf)(n,s.pos,s.inside,t)?t.preventDefault():Ue(n,"pointer"))};var So=class{constructor(e,t,r,o){this.view=e,this.pos=t,this.event=r,this.flushed=o,this.delayedSelectionSync=!1,this.mightDrag=null,this.startDoc=e.state.doc,this.selectNode=!!r[Zl],this.allowDefault=r.shiftKey;let i,s;if(t.inside>-1)i=e.state.doc.nodeAt(t.inside),s=t.inside;else{let d=e.state.doc.resolve(t.pos);i=d.parent,s=d.depth?d.before():0}let l=o?null:r.target,a=l?e.docView.nearestDesc(l,!0):null;this.target=a&&a.nodeDOM.nodeType==1?a.nodeDOM:null;let{selection:c}=e.state;r.button==0&&(i.type.spec.draggable&&i.type.spec.selectable!==!1||c instanceof w&&c.from<=s&&c.to>s)&&(this.mightDrag={node:i,pos:s,addAttr:!!(this.target&&!this.target.draggable),setUneditable:!!(this.target&&ue&&!this.target.hasAttribute("contentEditable"))}),this.target&&this.mightDrag&&(this.mightDrag.addAttr||this.mightDrag.setUneditable)&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&(this.target.draggable=!0),this.mightDrag.setUneditable&&setTimeout(()=>{this.view.input.mouseDown==this&&this.target.setAttribute("contentEditable","false")},20),this.view.domObserver.start()),e.root.addEventListener("mouseup",this.up=this.up.bind(this)),e.root.addEventListener("mousemove",this.move=this.move.bind(this)),Ue(e,"pointer")}done(){this.view.root.removeEventListener("mouseup",this.up),this.view.root.removeEventListener("mousemove",this.move),this.mightDrag&&this.target&&(this.view.domObserver.stop(),this.mightDrag.addAttr&&this.target.removeAttribute("draggable"),this.mightDrag.setUneditable&&this.target.removeAttribute("contentEditable"),this.view.domObserver.start()),this.delayedSelectionSync&&setTimeout(()=>Pe(this.view)),this.view.input.mouseDown=null}up(e){if(this.done(),!this.view.dom.contains(e.target))return;let t=this.pos;this.view.state.doc!=this.startDoc&&(t=this.view.posAtCoords(qn(e))),this.updateAllowDefault(e),this.allowDefault||!t?Ue(this.view,"pointer"):Wf(this.view,t.pos,t.inside,e,this.selectNode)?e.preventDefault():e.button==0&&(this.flushed||ee&&this.mightDrag&&!this.mightDrag.node.isAtom||J&&!this.view.state.selection.visible&&Math.min(Math.abs(t.pos-this.view.state.selection.from),Math.abs(t.pos-this.view.state.selection.to))<=2)?(At(this.view,C.near(this.view.state.doc.resolve(t.pos)),"pointer"),e.preventDefault()):Ue(this.view,"pointer")}move(e){this.updateAllowDefault(e),Ue(this.view,"pointer"),e.buttons==0&&this.done()}updateAllowDefault(e){!this.allowDefault&&(Math.abs(this.event.x-e.clientX)>4||Math.abs(this.event.y-e.clientY)>4)&&(this.allowDefault=!0)}};ne.touchstart=n=>{n.input.lastTouch=Date.now(),Ro(n),Ue(n,"pointer")};ne.touchmove=n=>{n.input.lastTouch=Date.now(),Ue(n,"pointer")};ne.contextmenu=n=>Ro(n);function Ql(n,e){return n.composing?!0:ee&&Math.abs(e.timeStamp-n.input.compositionEndedAt)<500?(n.input.compositionEndedAt=-2e8,!0):!1}var qf=_e?5e3:-1;re.compositionstart=re.compositionupdate=n=>{if(!n.composing){n.domObserver.flush();let{state:e}=n,t=e.selection.$to;if(e.selection instanceof O&&(e.storedMarks||!t.textOffset&&t.parentOffset&&t.nodeBefore.marks.some(r=>r.type.spec.inclusive===!1)||J&&Il&&Uf(n)))n.markCursor=n.state.storedMarks||t.marks(),sn(n,!0),n.markCursor=null;else if(sn(n,!e.selection.empty),ue&&e.selection.empty&&t.parentOffset&&!t.textOffset&&t.nodeBefore.marks.length){let r=n.domSelectionRange();for(let o=r.focusNode,i=r.focusOffset;o&&o.nodeType==1&&i!=0;){let s=i<0?o.lastChild:o.childNodes[i-1];if(!s)break;if(s.nodeType==3){let l=n.domSelection();l&&l.collapse(s,s.nodeValue.length);break}else o=s,i=-1}}n.input.composing=!0}ea(n,qf)};function Uf(n){let{focusNode:e,focusOffset:t}=n.domSelectionRange();if(!e||e.nodeType!=1||t>=e.childNodes.length)return!1;let r=e.childNodes[t];return r.nodeType==1&&r.contentEditable=="false"}re.compositionend=(n,e)=>{n.composing&&(n.input.composing=!1,n.input.compositionEndedAt=e.timeStamp,n.input.compositionPendingChanges=n.domObserver.pendingRecords().length?n.input.compositionID:0,n.input.compositionNode=null,n.input.badSafariComposition?n.domObserver.forceFlush():n.input.compositionPendingChanges&&Promise.resolve().then(()=>n.domObserver.flush()),n.input.compositionID++,ea(n,20))};function ea(n,e){clearTimeout(n.input.composingTimeout),e>-1&&(n.input.composingTimeout=setTimeout(()=>sn(n),e))}function ta(n){for(n.composing&&(n.input.composing=!1,n.input.compositionEndedAt=Yf());n.input.compositionNodes.length>0;)n.input.compositionNodes.pop().markParentsDirty()}function Gf(n){let e=n.domSelectionRange();if(!e.focusNode)return null;let t=Hd(e.focusNode,e.focusOffset),r=Jd(e.focusNode,e.focusOffset);if(t&&r&&t!=r){let o=r.pmViewDesc,i=n.domObserver.lastChangedTextNode;if(t==i||r==i)return i;if(!o||!o.isText(r.nodeValue))return r;if(n.input.compositionNode==r){let s=t.pmViewDesc;if(!(!s||!s.isText(t.nodeValue)))return r}}return t||r}function Yf(){let n=document.createEvent("Event");return n.initEvent("event",!0,!0),n.timeStamp}function sn(n,e=!1){if(!(_e&&n.domObserver.flushingSoon>=0)){if(n.domObserver.forceFlush(),ta(n),e||n.docView&&n.docView.dirty){let t=Oo(n),r=n.state.selection;return t&&!t.eq(r)?n.dispatch(n.state.tr.setSelection(t)):(n.markCursor||e)&&!r.$from.node(r.$from.sharedDepth(r.to)).inlineContent?n.dispatch(n.state.tr.deleteSelection()):n.updateState(n.state),!0}return!1}}function Xf(n,e){if(!n.dom.parentNode)return;let t=n.dom.parentNode.appendChild(document.createElement("div"));t.appendChild(e),t.style.cssText="position: fixed; left: -10000px; top: 10px";let r=getSelection(),o=document.createRange();o.selectNodeContents(e),n.dom.blur(),r.removeAllRanges(),r.addRange(o),setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t),n.focus()},50)}var ln=se&&Ge<15||Dt&&Yd<604;ne.copy=re.cut=(n,e)=>{let t=e,r=n.state.selection,o=t.type=="cut";if(r.empty)return;let i=ln?null:t.clipboardData,s=r.content(),{dom:l,text:a}=No(n,s);i?(t.preventDefault(),i.clearData(),i.setData("text/html",l.innerHTML),i.setData("text/plain",a)):Xf(n,l),o&&n.dispatch(n.state.tr.deleteSelection().scrollIntoView().setMeta("uiEvent","cut"))};function Zf(n){return n.openStart==0&&n.openEnd==0&&n.content.childCount==1?n.content.firstChild:null}function Qf(n,e){if(!n.dom.parentNode)return;let t=n.input.shiftKey||n.state.selection.$from.parent.type.spec.code,r=n.dom.parentNode.appendChild(document.createElement(t?"textarea":"div"));t||(r.contentEditable="true"),r.style.cssText="position: fixed; left: -10000px; top: 10px",r.focus();let o=n.input.shiftKey&&n.input.lastKeyCode!=45;setTimeout(()=>{n.focus(),r.parentNode&&r.parentNode.removeChild(r),t?an(n,r.value,null,o,e):an(n,r.textContent,r.innerHTML,o,e)},50)}function an(n,e,t,r,o){let i=Ao(n,e,t,r,n.state.selection.$from);if(n.someProp("handlePaste",a=>a(n,o,i||k.empty)))return!0;if(!i)return!1;let s=Zf(i),l=s?n.state.tr.replaceSelectionWith(s,r):n.state.tr.replaceSelection(i);return n.dispatch(l.scrollIntoView().setMeta("paste",!0).setMeta("uiEvent","paste")),!0}function na(n){let e=n.getData("text/plain")||n.getData("Text");if(e)return e;let t=n.getData("text/uri-list");return t?t.replace(/\r?\n/g," "):""}re.paste=(n,e)=>{let t=e;if(n.composing&&!_e)return;let r=ln?null:t.clipboardData,o=n.input.shiftKey&&n.input.lastKeyCode!=45;r&&an(n,na(r),r.getData("text/html"),o,t)?t.preventDefault():Qf(n,t)};var jn=class{constructor(e,t,r){this.slice=e,this.move=t,this.node=r}},eu=de?"altKey":"ctrlKey";function ra(n,e){let t;return n.someProp("dragCopies",r=>{t=t||r(e)}),t!=null?!t:!e[eu]}ne.dragstart=(n,e)=>{let t=e,r=n.input.mouseDown;if(r&&r.done(),!t.dataTransfer)return;let o=n.state.selection,i=o.empty?null:n.posAtCoords(qn(t)),s;if(!(i&&i.pos>=o.from&&i.pos<=(o instanceof w?o.to-1:o.to))){if(r&&r.mightDrag)s=w.create(n.state.doc,r.mightDrag.pos);else if(t.target&&t.target.nodeType==1){let f=n.docView.nearestDesc(t.target,!0);f&&f.node.type.spec.draggable&&f!=n.docView&&(s=w.create(n.state.doc,f.posBefore))}}let l=(s||n.state.selection).content(),{dom:a,text:c,slice:d}=No(n,l);(!t.dataTransfer.files.length||!J||Rl>120)&&t.dataTransfer.clearData(),t.dataTransfer.setData(ln?"Text":"text/html",a.innerHTML),t.dataTransfer.effectAllowed="copyMove",ln||t.dataTransfer.setData("text/plain",c),n.dragging=new jn(d,ra(n,t),s)};ne.dragend=n=>{let e=n.dragging;window.setTimeout(()=>{n.dragging==e&&(n.dragging=null)},50)};re.dragover=re.dragenter=(n,e)=>e.preventDefault();re.drop=(n,e)=>{try{tu(n,e,n.dragging)}finally{n.dragging=null}};function tu(n,e,t){if(!e.dataTransfer)return;let r=n.posAtCoords(qn(e));if(!r)return;let o=n.state.doc.resolve(r.pos),i=t&&t.slice;i?n.someProp("transformPasted",p=>{i=p(i,n,!1)}):i=Ao(n,na(e.dataTransfer),ln?null:e.dataTransfer.getData("text/html"),!1,o);let s=!!(t&&ra(n,e));if(n.someProp("handleDrop",p=>p(n,e,i||k.empty,s))){e.preventDefault();return}if(!i)return;e.preventDefault();let l=i?Qt(n.state.doc,o.pos,i):o.pos;l==null&&(l=o.pos);let a=n.state.tr;if(s){let{node:p}=t;p?p.replace(a):a.deleteSelection()}let c=a.mapping.map(l),d=i.openStart==0&&i.openEnd==0&&i.content.childCount==1,f=a.doc;if(d?a.replaceRangeWith(c,c,i.content.firstChild):a.replaceRange(c,c,i),a.doc.eq(f))return;let u=a.doc.resolve(c);if(d&&w.isSelectable(i.content.firstChild)&&u.nodeAfter&&u.nodeAfter.sameMarkup(i.content.firstChild))a.setSelection(new w(u));else{let p=a.mapping.map(l);a.mapping.maps[a.mapping.maps.length-1].forEach((h,m,g,y)=>p=y),a.setSelection(To(n,u,a.doc.resolve(p)))}n.focus(),n.dispatch(a.setMeta("uiEvent","drop"))}ne.focus=n=>{n.input.lastFocus=Date.now(),n.focused||(n.domObserver.stop(),n.dom.classList.add("ProseMirror-focused"),n.domObserver.start(),n.focused=!0,setTimeout(()=>{n.docView&&n.hasFocus()&&!n.domObserver.currentSelection.eq(n.domSelectionRange())&&Pe(n)},20))};ne.blur=(n,e)=>{let t=e;n.focused&&(n.domObserver.stop(),n.dom.classList.remove("ProseMirror-focused"),n.domObserver.start(),t.relatedTarget&&n.dom.contains(t.relatedTarget)&&n.domObserver.currentSelection.clear(),n.focused=!1)};ne.beforeinput=(n,e)=>{if(J&&_e&&e.inputType=="deleteContentBackward"){n.domObserver.flushSoon();let{domChangeCount:r}=n.input;setTimeout(()=>{if(n.input.domChangeCount!=r||(n.dom.blur(),n.focus(),n.someProp("handleKeyDown",i=>i(n,lt(8,"Backspace")))))return;let{$cursor:o}=n.state.selection;o&&o.pos>0&&n.dispatch(n.state.tr.delete(o.pos-1,o.pos).scrollIntoView())},50)}};for(let n in re)ne[n]=re[n];function cn(n,e){if(n==e)return!0;for(let t in n)if(n[t]!==e[t])return!1;for(let t in e)if(!(t in n))return!1;return!0}var Wn=class n{constructor(e,t){this.toDOM=e,this.spec=t||ft,this.side=this.spec.side||0}map(e,t,r,o){let{pos:i,deleted:s}=e.mapResult(t.from+o,this.side<0?-1:1);return s?null:new oe(i-r,i-r,this)}valid(){return!0}eq(e){return this==e||e instanceof n&&(this.spec.key&&this.spec.key==e.spec.key||this.toDOM==e.toDOM&&cn(this.spec,e.spec))}destroy(e){this.spec.destroy&&this.spec.destroy(e)}},dt=class n{constructor(e,t){this.attrs=e,this.spec=t||ft}map(e,t,r,o){let i=e.map(t.from+o,this.spec.inclusiveStart?-1:1)-r,s=e.map(t.to+o,this.spec.inclusiveEnd?1:-1)-r;return i>=s?null:new oe(i,s,this)}valid(e,t){return t.from=e&&(!i||i(l.spec))&&r.push(l.copy(l.from+o,l.to+o))}for(let s=0;se){let l=this.children[s]+1;this.children[s+2].findInner(e-l,t-l,r,o+l,i)}}map(e,t,r){return this==Q||e.maps.length==0?this:this.mapInner(e,t,0,0,r||ft)}mapInner(e,t,r,o,i){let s;for(let l=0;l{let c=a+r,d;if(d=ia(t,l,c)){for(o||(o=this.children.slice());il&&f.to=e){this.children[l]==e&&(r=this.children[l+2]);break}let i=e+1,s=i+t.content.size;for(let l=0;li&&a.type instanceof dt){let c=Math.max(i,a.from)-i,d=Math.min(s,a.to)-i;co.map(e,t,ft));return n.from(r)}forChild(e,t){if(t.isLeaf)return $.empty;let r=[];for(let o=0;ot instanceof $)?e:e.reduce((t,r)=>t.concat(r instanceof $?r:r.members),[]))}}forEachSet(e){for(let t=0;t{let g=m-h-(p-u);for(let y=0;yS+d-f)continue;let M=l[y]+d-f;p>=M?l[y+1]=u<=M?-2:-1:u>=d&&g&&(l[y]+=g,l[y+1]+=g)}f+=g}),d=t.maps[c].map(d,-1)}let a=!1;for(let c=0;c=r.content.size){a=!0;continue}let u=t.map(n[c+1]+i,-1),p=u-o,{index:h,offset:m}=r.content.findIndex(f),g=r.maybeChild(h);if(g&&m==f&&m+g.nodeSize==p){let y=l[c+2].mapInner(t,g,d+1,n[c]+i+1,s);y!=Q?(l[c]=f,l[c+1]=p,l[c+2]=y):(l[c+1]=-2,a=!0)}else a=!0}if(a){let c=ru(l,n,e,t,o,i,s),d=Hn(c,r,0,s);e=d.local;for(let f=0;ft&&s.to{let c=ia(n,l,a+t);if(c){i=!0;let d=Hn(c,l,t+a+1,r);d!=Q&&o.push(a,a+l.nodeSize,d)}});let s=oa(i?sa(n):n,-t).sort(ut);for(let l=0;l0;)e++;n.splice(e,0,t)}function oo(n){let e=[];return n.someProp("decorations",t=>{let r=t(n.state);r&&r!=Q&&e.push(r)}),n.cursorWrapper&&e.push($.create(n.state.doc,[n.cursorWrapper.deco])),Kn.from(e)}var ou={childList:!0,characterData:!0,characterDataOldValue:!0,attributes:!0,attributeOldValue:!0,subtree:!0},iu=se&&Ge<=11,Co=class{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}set(e){this.anchorNode=e.anchorNode,this.anchorOffset=e.anchorOffset,this.focusNode=e.focusNode,this.focusOffset=e.focusOffset}clear(){this.anchorNode=this.focusNode=null}eq(e){return e.anchorNode==this.anchorNode&&e.anchorOffset==this.anchorOffset&&e.focusNode==this.focusNode&&e.focusOffset==this.focusOffset}},Mo=class{constructor(e,t){this.view=e,this.handleDOMChange=t,this.queue=[],this.flushingSoon=-1,this.observer=null,this.currentSelection=new Co,this.onCharData=null,this.suppressingSelectionUpdates=!1,this.lastChangedTextNode=null,this.observer=window.MutationObserver&&new window.MutationObserver(r=>{for(let o=0;oo.type=="childList"&&o.removedNodes.length||o.type=="characterData"&&o.oldValue.length>o.target.nodeValue.length)?this.flushSoon():ee&&e.composing&&r.some(o=>o.type=="childList"&&o.target.nodeName=="TR")?(e.input.badSafariComposition=!0,this.flushSoon()):this.flush()}),iu&&(this.onCharData=r=>{this.queue.push({target:r.target,type:"characterData",oldValue:r.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this)}flushSoon(){this.flushingSoon<0&&(this.flushingSoon=window.setTimeout(()=>{this.flushingSoon=-1,this.flush()},20))}forceFlush(){this.flushingSoon>-1&&(window.clearTimeout(this.flushingSoon),this.flushingSoon=-1,this.flush())}start(){this.observer&&(this.observer.takeRecords(),this.observer.observe(this.view.dom,ou)),this.onCharData&&this.view.dom.addEventListener("DOMCharacterDataModified",this.onCharData),this.connectSelection()}stop(){if(this.observer){let e=this.observer.takeRecords();if(e.length){for(let t=0;tthis.flush(),20)}this.observer.disconnect()}this.onCharData&&this.view.dom.removeEventListener("DOMCharacterDataModified",this.onCharData),this.disconnectSelection()}connectSelection(){this.view.dom.ownerDocument.addEventListener("selectionchange",this.onSelectionChange)}disconnectSelection(){this.view.dom.ownerDocument.removeEventListener("selectionchange",this.onSelectionChange)}suppressSelectionUpdates(){this.suppressingSelectionUpdates=!0,setTimeout(()=>this.suppressingSelectionUpdates=!1,50)}onSelectionChange(){if(ul(this.view)){if(this.suppressingSelectionUpdates)return Pe(this.view);if(se&&Ge<=11&&!this.view.state.selection.empty){let e=this.view.domSelectionRange();if(e.focusNode&&pt(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset))return this.flushSoon()}this.flush()}}setCurSelection(){this.currentSelection.set(this.view.domSelectionRange())}ignoreSelectionChange(e){if(!e.focusNode)return!0;let t=new Set,r;for(let i=e.focusNode;i;i=vt(i))t.add(i);for(let i=e.anchorNode;i;i=vt(i))if(t.has(i)){r=i;break}let o=r&&this.view.docView.nearestDesc(r);if(o&&o.ignoreMutation({type:"selection",target:r.nodeType==3?r.parentNode:r}))return this.setCurSelection(),!0}pendingRecords(){if(this.observer)for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}flush(){let{view:e}=this;if(!e.docView||this.flushingSoon>-1)return;let t=this.pendingRecords();t.length&&(this.queue=[]);let r=e.domSelectionRange(),o=!this.suppressingSelectionUpdates&&!this.currentSelection.eq(r)&&ul(e)&&!this.ignoreSelectionChange(r),i=-1,s=-1,l=!1,a=[];if(e.editable)for(let d=0;dd.nodeName=="BR")&&(e.input.lastKeyCode==8||e.input.lastKeyCode==46)){for(let d of a)if(d.nodeName=="BR"&&d.parentNode){let f=d.nextSibling;for(;f&&f.nodeType==1;){if(f.contentEditable=="false"){d.parentNode.removeChild(d);break}f=f.firstChild}}}else if(ue&&a.length){let d=a.filter(f=>f.nodeName=="BR");if(d.length==2){let[f,u]=d;f.parentNode&&f.parentNode.parentNode==u.parentNode?u.remove():f.remove()}else{let{focusNode:f}=this.currentSelection;for(let u of d){let p=u.parentNode;p&&p.nodeName=="LI"&&(!f||au(e,f)!=p)&&u.remove()}}}let c=null;i<0&&o&&e.input.lastFocus>Date.now()-200&&Math.max(e.input.lastTouch,e.input.lastClick.time)-1||o)&&(i>-1&&(e.docView.markDirty(i,s),su(e)),e.input.badSafariComposition&&(e.input.badSafariComposition=!1,cu(e,a)),this.handleDOMChange(i,s,l,a),e.docView&&e.docView.dirty?e.updateState(e.state):this.currentSelection.eq(r)||Pe(e),this.currentSelection.set(r))}registerMutation(e,t){if(t.indexOf(e.target)>-1)return null;let r=this.view.docView.nearestDesc(e.target);if(e.type=="attributes"&&(r==this.view.docView||e.attributeName=="contenteditable"||e.attributeName=="style"&&!e.oldValue&&!e.target.getAttribute("style"))||!r||r.ignoreMutation(e))return null;if(e.type=="childList"){for(let d=0;do;g--){let y=r.childNodes[g-1],S=y.pmViewDesc;if(y.nodeName=="BR"&&!S){i=g;break}if(!S||S.size)break}let f=n.state.doc,u=n.someProp("domParser")||me.fromSchema(n.state.schema),p=f.resolve(s),h=null,m=u.parse(r,{topNode:p.parent,topMatch:p.parent.contentMatchAt(p.index()),topOpen:!0,from:o,to:i,preserveWhitespace:p.parent.type.whitespace=="pre"?"full":!0,findPositions:c,ruleFromNode:fu,context:p});if(c&&c[0].pos!=null){let g=c[0].pos,y=c[1]&&c[1].pos;y==null&&(y=g),h={anchor:g+s,head:y+s}}return{doc:m,sel:h,from:s,to:l}}function fu(n){let e=n.pmViewDesc;if(e)return e.parseRule();if(n.nodeName=="BR"&&n.parentNode){if(ee&&/^(ul|ol)$/i.test(n.parentNode.nodeName)){let t=document.createElement("div");return t.appendChild(document.createElement("li")),{skip:t}}else if(n.parentNode.lastChild==n||ee&&/^(tr|table)$/i.test(n.parentNode.nodeName))return{ignore:!0}}else if(n.nodeName=="IMG"&&n.getAttribute("mark-placeholder"))return{ignore:!0};return null}var uu=/^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;function pu(n,e,t,r,o){let i=n.input.compositionPendingChanges||(n.composing?n.input.compositionID:0);if(n.input.compositionPendingChanges=0,e<0){let T=n.input.lastSelectionTime>Date.now()-50?n.input.lastSelectionOrigin:null,D=Oo(n,T);if(D&&!n.state.selection.eq(D)){if(J&&_e&&n.input.lastKeyCode===13&&Date.now()-100Qc(n,lt(13,"Enter"))))return;let Y=n.state.tr.setSelection(D);T=="pointer"?Y.setMeta("pointer",!0):T=="key"&&Y.scrollIntoView(),i&&Y.setMeta("composition",i),n.dispatch(Y)}return}let s=n.state.doc.resolve(e),l=s.sharedDepth(t);e=s.before(l+1),t=n.state.doc.resolve(t).after(l+1);let a=n.state.selection,c=du(n,e,t),d=n.state.doc,f=d.slice(c.from,c.to),u,p;n.input.lastKeyCode===8&&Date.now()-100Date.now()-225||_e)&&o.some(T=>T.nodeType==1&&!uu.test(T.nodeName))&&(!h||h.endA>=h.endB)&&n.someProp("handleKeyDown",T=>T(n,lt(13,"Enter")))){n.input.lastIOSEnter=0;return}if(!h)if(r&&a instanceof O&&!a.empty&&a.$head.sameParent(a.$anchor)&&!n.composing&&!(c.sel&&c.sel.anchor!=c.sel.head))h={start:a.from,endA:a.to,endB:a.to};else{if(c.sel){let T=Ml(n,n.state.doc,c.sel);if(T&&!T.eq(n.state.selection)){let D=n.state.tr.setSelection(T);i&&D.setMeta("composition",i),n.dispatch(D)}}return}n.state.selection.fromn.state.selection.from&&h.start<=n.state.selection.from+2&&n.state.selection.from>=c.from?h.start=n.state.selection.from:h.endA=n.state.selection.to-2&&n.state.selection.to<=c.to&&(h.endB+=n.state.selection.to-h.endA,h.endA=n.state.selection.to)),se&&Ge<=11&&h.endB==h.start+1&&h.endA==h.start&&h.start>c.from&&c.doc.textBetween(h.start-c.from-1,h.start-c.from+1)==" \xA0"&&(h.start--,h.endA--,h.endB--);let m=c.doc.resolveNoCache(h.start-c.from),g=c.doc.resolveNoCache(h.endB-c.from),y=d.resolve(h.start),S=m.sameParent(g)&&m.parent.inlineContent&&y.end()>=h.endA;if((Dt&&n.input.lastIOSEnter>Date.now()-225&&(!S||o.some(T=>T.nodeName=="DIV"||T.nodeName=="P"))||!S&&m.posT(n,lt(13,"Enter")))){n.input.lastIOSEnter=0;return}if(n.state.selection.anchor>h.start&&mu(d,h.start,h.endA,m,g)&&n.someProp("handleKeyDown",T=>T(n,lt(8,"Backspace")))){_e&&J&&n.domObserver.suppressSelectionUpdates();return}J&&h.endB==h.start&&(n.input.lastChromeDelete=Date.now()),_e&&!S&&m.start()!=g.start()&&g.parentOffset==0&&m.depth==g.depth&&c.sel&&c.sel.anchor==c.sel.head&&c.sel.head==h.endA&&(h.endB-=2,g=c.doc.resolveNoCache(h.endB-c.from),setTimeout(()=>{n.someProp("handleKeyDown",function(T){return T(n,lt(13,"Enter"))})},20));let M=h.start,v=h.endA,A=T=>{let D=T||n.state.tr.replace(M,v,c.doc.slice(h.start-c.from,h.endB-c.from));if(c.sel){let Y=Ml(n,D.doc,c.sel);Y&&!(J&&n.composing&&Y.empty&&(h.start!=h.endB||n.input.lastChromeDeletePe(n),20));let T=A(n.state.tr.delete(M,v)),D=d.resolve(h.start).marksAcross(d.resolve(h.endA));D&&T.ensureMarks(D),n.dispatch(T)}else if(h.endA==h.endB&&(P=hu(m.parent.content.cut(m.parentOffset,g.parentOffset),y.parent.content.cut(y.parentOffset,h.endA-y.start())))){let T=A(n.state.tr);P.type=="add"?T.addMark(M,v,P.mark):T.removeMark(M,v,P.mark),n.dispatch(T)}else if(m.parent.child(m.index()).isText&&m.index()==g.index()-(g.textOffset?0:1)){let T=m.parent.textBetween(m.parentOffset,g.parentOffset),D=()=>A(n.state.tr.insertText(T,M,v));n.someProp("handleTextInput",Y=>Y(n,M,v,T,D))||n.dispatch(D())}else n.dispatch(A());else n.dispatch(A())}function Ml(n,e,t){return Math.max(t.anchor,t.head)>e.content.size?null:To(n,e.resolve(t.anchor),e.resolve(t.head))}function hu(n,e){let t=n.firstChild.marks,r=e.firstChild.marks,o=t,i=r,s,l,a;for(let d=0;dd.mark(l.addToSet(d.marks));else if(o.length==0&&i.length==1)l=i[0],s="remove",a=d=>d.mark(l.removeFromSet(d.marks));else return null;let c=[];for(let d=0;dt||io(s,!0,!1)0&&(e||n.indexAfter(r)==n.node(r).childCount);)r--,o++,e=!1;if(t){let i=n.node(r).maybeChild(n.indexAfter(r));for(;i&&!i.isLeaf;)i=i.firstChild,o++}return o}function gu(n,e,t,r,o){let i=n.findDiffStart(e,t);if(i==null)return null;let{a:s,b:l}=n.findDiffEnd(e,t+n.size,t+e.size);if(o=="end"){let a=Math.max(0,i-Math.min(s,l));r-=s+a-i}if(s=s?i-r:0;i-=a,i&&i=l?i-r:0;i-=a,i&&i=56320&&e<=57343&&t>=55296&&t<=56319}var yu=Ao,bu=sn,It=class{constructor(e,t){this._root=null,this.focused=!1,this.trackWrites=null,this.mounted=!1,this.markCursor=null,this.cursorWrapper=null,this.lastSelectedViewDesc=void 0,this.input=new ko,this.prevDirectPlugins=[],this.pluginViews=[],this.requiresGeckoHackNode=!1,this.dragging=null,this._props=t,this.state=t.state,this.directPlugins=t.plugins||[],this.directPlugins.forEach(vl),this.dispatch=this.dispatch.bind(this),this.dom=e&&e.mount||document.createElement("div"),e&&(e.appendChild?e.appendChild(this.dom):typeof e=="function"?e(this.dom):e.mount&&(this.mounted=!0)),this.editable=Nl(this),Tl(this),this.nodeViews=Al(this),this.docView=sl(this.state.doc,Ol(this),oo(this),this.dom,this),this.domObserver=new Mo(this,(r,o,i,s)=>pu(this,r,o,i,s)),this.domObserver.start(),Bf(this),this.updatePluginViews()}get composing(){return this.input.composing}get props(){if(this._props.state!=this.state){let e=this._props;this._props={};for(let t in e)this._props[t]=e[t];this._props.state=this.state}return this._props}update(e){e.handleDOMEvents!=this._props.handleDOMEvents&&xo(this);let t=this._props;this._props=e,e.plugins&&(e.plugins.forEach(vl),this.directPlugins=e.plugins),this.updateStateInner(e.state,t)}setProps(e){let t={};for(let r in this._props)t[r]=this._props[r];t.state=this.state;for(let r in e)t[r]=e[r];this.update(t)}updateState(e){this.updateStateInner(e,this._props)}updateStateInner(e,t){var r;let o=this.state,i=!1,s=!1;e.storedMarks&&this.composing&&(ta(this),s=!0),this.state=e;let l=o.plugins!=e.plugins||this._props.plugins!=t.plugins;if(l||this._props.plugins!=t.plugins||this._props.nodeViews!=t.nodeViews){let p=Al(this);xu(p,this.nodeViews)&&(this.nodeViews=p,i=!0)}(l||t.handleDOMEvents!=this._props.handleDOMEvents)&&xo(this),this.editable=Nl(this),Tl(this);let a=oo(this),c=Ol(this),d=o.plugins!=e.plugins&&!o.doc.eq(e.doc)?"reset":e.scrollToSelection>o.scrollToSelection?"to selection":"preserve",f=i||!this.docView.matchesNode(e.doc,c,a);(f||!e.selection.eq(o.selection))&&(s=!0);let u=d=="preserve"&&s&&this.dom.style.overflowAnchor==null&&Qd(this);if(s){this.domObserver.stop();let p=f&&(se||J)&&!this.composing&&!o.selection.empty&&!e.selection.empty&&ku(o.selection,e.selection);if(f){let h=J?this.trackWrites=this.domSelectionRange().focusNode:null;this.composing&&(this.input.compositionNode=Gf(this)),(i||!this.docView.update(e.doc,c,a,this))&&(this.docView.updateOuterDeco(c),this.docView.destroy(),this.docView=sl(e.doc,c,a,this.dom,this)),h&&(!this.trackWrites||!this.dom.contains(this.trackWrites))&&(p=!0)}p||!(this.input.mouseDown&&this.domObserver.currentSelection.eq(this.domSelectionRange())&&Sf(this))?Pe(this,p):(Kl(this,e.selection),this.domObserver.setCurSelection()),this.domObserver.start()}this.updatePluginViews(o),!((r=this.dragging)===null||r===void 0)&&r.node&&!o.doc.eq(e.doc)&&this.updateDraggedNode(this.dragging,o),d=="reset"?this.dom.scrollTop=0:d=="to selection"?this.scrollToSelection():u&&ef(u)}scrollToSelection(){let e=this.domSelectionRange().focusNode;if(!(!e||!this.dom.contains(e.nodeType==1?e:e.parentNode))){if(!this.someProp("handleScrollToSelection",t=>t(this)))if(this.state.selection instanceof w){let t=this.docView.domAfterPos(this.state.selection.from);t.nodeType==1&&el(this,t.getBoundingClientRect(),e)}else el(this,this.coordsAtPos(this.state.selection.head,1),e)}}destroyPluginViews(){let e;for(;e=this.pluginViews.pop();)e.destroy&&e.destroy()}updatePluginViews(e){if(!e||e.plugins!=this.state.plugins||this.directPlugins!=this.prevDirectPlugins){this.prevDirectPlugins=this.directPlugins,this.destroyPluginViews();for(let t=0;t0&&it.ownerDocument.getSelection()),this._root=t}return e||document}updateRoot(){this._root=null}posAtCoords(e){return lf(this,e)}coordsAtPos(e,t=1){return Fl(this,e,t)}domAtPos(e,t=0){return this.docView.domFromPos(e,t)}nodeDOM(e){let t=this.docView.descAt(e);return t?t.nodeDOM:null}posAtDOM(e,t,r=-1){let o=this.docView.posFromDOM(e,t,r);if(o==null)throw new RangeError("DOM position not inside the editor");return o}endOfTextblock(e,t){return uf(this,t||this.state,e)}pasteHTML(e,t){return an(this,"",e,!1,t||new ClipboardEvent("paste"))}pasteText(e,t){return an(this,e,null,!0,t||new ClipboardEvent("paste"))}serializeForClipboard(e){return No(this,e)}destroy(){this.docView&&(zf(this),this.destroyPluginViews(),this.mounted?(this.docView.update(this.state.doc,[],oo(this),this),this.dom.textContent=""):this.dom.parentNode&&this.dom.parentNode.removeChild(this.dom),this.docView.destroy(),this.docView=null,Wd())}get isDestroyed(){return this.docView==null}dispatchEvent(e){return Lf(this,e)}domSelectionRange(){let e=this.domSelection();return e?ee&&this.root.nodeType===11&&Ud(this.dom.ownerDocument)==this.dom&&lu(this,e)||e:{focusNode:null,focusOffset:0,anchorNode:null,anchorOffset:0}}domSelection(){return this.root.getSelection()}};It.prototype.dispatch=function(n){let e=this._props.dispatchTransaction;e?e.call(this,n):this.updateState(this.state.apply(n))};function Ol(n){let e=Object.create(null);return e.class="ProseMirror",e.contenteditable=String(n.editable),n.someProp("attributes",t=>{if(typeof t=="function"&&(t=t(n.state)),t)for(let r in t)r=="class"?e.class+=" "+t[r]:r=="style"?e.style=(e.style?e.style+";":"")+t[r]:!e[r]&&r!="contenteditable"&&r!="nodeName"&&(e[r]=String(t[r]))}),e.translate||(e.translate="no"),[oe.node(0,n.state.doc.content.size,e)]}function Tl(n){if(n.markCursor){let e=document.createElement("img");e.className="ProseMirror-separator",e.setAttribute("mark-placeholder","true"),e.setAttribute("alt",""),n.cursorWrapper={dom:e,deco:oe.widget(n.state.selection.from,e,{raw:!0,marks:n.markCursor})}}else n.cursorWrapper=null}function Nl(n){return!n.someProp("editable",e=>e(n.state)===!1)}function ku(n,e){let t=Math.min(n.$anchor.sharedDepth(n.head),e.$anchor.sharedDepth(e.head));return n.$anchor.start(t)!=e.$anchor.start(t)}function Al(n){let e=Object.create(null);function t(r){for(let o in r)Object.prototype.hasOwnProperty.call(e,o)||(e[o]=r[o])}return n.someProp("nodeViews",t),n.someProp("markViews",t),e}function xu(n,e){let t=0,r=0;for(let o in n){if(n[o]!=e[o])return!0;t++}for(let o in e)r++;return t!=r}function vl(n){if(n.spec.state||n.spec.filterTransaction||n.spec.appendTransaction)throw new RangeError("Plugins passed directly to the view must not have a state component")}var zo={};ce(zo,{keydownHandler:()=>_t,keymap:()=>Bo});var Be={8:"Backspace",9:"Tab",10:"Enter",12:"NumLock",13:"Enter",16:"Shift",17:"Control",18:"Alt",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",44:"PrintScreen",45:"Insert",46:"Delete",59:";",61:"=",91:"Meta",92:"Meta",106:"*",107:"+",108:",",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",160:"Shift",161:"Shift",162:"Control",163:"Control",164:"Alt",165:"Alt",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},Gn={48:")",49:"!",50:"@",51:"#",52:"$",53:"%",54:"^",55:"&",56:"*",57:"(",59:":",61:"+",173:"_",186:":",187:"+",188:"<",189:"_",190:">",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},Su=typeof navigator<"u"&&/Mac/.test(navigator.platform),wu=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(F=0;F<10;F++)Be[48+F]=Be[96+F]=String(F);var F;for(F=1;F<=24;F++)Be[F+111]="F"+F;var F;for(F=65;F<=90;F++)Be[F]=String.fromCharCode(F+32),Gn[F]=String.fromCharCode(F);var F;for(Un in Be)Gn.hasOwnProperty(Un)||(Gn[Un]=Be[Un]);var Un;function la(n){var e=Su&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||wu&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?Gn:Be)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}var Cu=typeof navigator<"u"&&/Mac|iP(hone|[oa]d)/.test(navigator.platform),Mu=typeof navigator<"u"&&/Win/.test(navigator.platform);function Eu(n){let e=n.split(/-(?!$)/),t=e[e.length-1];t=="Space"&&(t=" ");let r,o,i,s;for(let l=0;lKe,DOMParser:()=>me,DOMSerializer:()=>ke,Fragment:()=>b,Mark:()=>R,MarkType:()=>bt,Node:()=>te,NodeRange:()=>We,NodeType:()=>qt,ReplaceError:()=>je,ResolvedPos:()=>Jt,Schema:()=>kt,Slice:()=>k});var Lo={};ce(Lo,{AddMarkStep:()=>wt,AddNodeMarkStep:()=>Ct,AttrStep:()=>Xt,DocAttrStep:()=>Zt,MapResult:()=>xt,Mapping:()=>St,RemoveMarkStep:()=>He,RemoveNodeMarkStep:()=>nt,ReplaceAroundStep:()=>z,ReplaceStep:()=>W,Step:()=>L,StepMap:()=>xe,StepResult:()=>j,Transform:()=>ve,TransformError:()=>rt,canJoin:()=>ae,canSplit:()=>ie,dropPoint:()=>Qt,findWrapping:()=>ot,insertPoint:()=>Ls,joinPoint:()=>it,liftTarget:()=>Se,replaceStep:()=>Mt});var Qo={};ce(Qo,{autoJoin:()=>Iu,baseKeymap:()=>Pu,chainCommands:()=>lr,createParagraphNear:()=>nr,deleteSelection:()=>un,exitCode:()=>tr,joinBackward:()=>Yn,joinDown:()=>Jo,joinForward:()=>Zn,joinTextblockBackward:()=>Vo,joinTextblockForward:()=>jo,joinUp:()=>Ho,lift:()=>qo,liftEmptyBlock:()=>rr,macBaseKeymap:()=>Zo,newlineInCode:()=>er,pcBaseKeymap:()=>Me,selectAll:()=>pa,selectNodeBackward:()=>Xn,selectNodeForward:()=>Qn,selectParentNode:()=>Yo,selectTextblockEnd:()=>ir,selectTextblockStart:()=>or,setBlockType:()=>sr,splitBlock:()=>Go,splitBlockAs:()=>ua,splitBlockKeepMarks:()=>Tu,toggleMark:()=>Du,wrapIn:()=>Xo});var un=(n,e)=>n.selection.empty?!1:(e&&e(n.tr.deleteSelection().scrollIntoView()),!0);function ca(n,e){let{$cursor:t}=n.selection;return!t||(e?!e.endOfTextblock("backward",n):t.parentOffset>0)?null:t}var Yn=(n,e,t)=>{let r=ca(n,t);if(!r)return!1;let o=Wo(r);if(!o){let s=r.blockRange(),l=s&&Se(s);return l==null?!1:(e&&e(n.tr.lift(s,l).scrollIntoView()),!0)}let i=o.nodeBefore;if(ha(n,o,e,-1))return!0;if(r.parent.content.size==0&&(Pt(i,"end")||w.isSelectable(i)))for(let s=r.depth;;s--){let l=Mt(n.doc,r.before(s),r.after(s),k.empty);if(l&&l.slice.size1)break}return i.isAtom&&o.depth==r.depth-1?(e&&e(n.tr.delete(o.pos-i.nodeSize,o.pos).scrollIntoView()),!0):!1},Vo=(n,e,t)=>{let r=ca(n,t);if(!r)return!1;let o=Wo(r);return o?da(n,o,e):!1},jo=(n,e,t)=>{let r=fa(n,t);if(!r)return!1;let o=Ko(r);return o?da(n,o,e):!1};function da(n,e,t){let r=e.nodeBefore,o=r,i=e.pos-1;for(;!o.isTextblock;i--){if(o.type.spec.isolating)return!1;let d=o.lastChild;if(!d)return!1;o=d}let s=e.nodeAfter,l=s,a=e.pos+1;for(;!l.isTextblock;a++){if(l.type.spec.isolating)return!1;let d=l.firstChild;if(!d)return!1;l=d}let c=Mt(n.doc,i,a,k.empty);if(!c||c.from!=i||c instanceof W&&c.slice.size>=a-i)return!1;if(t){let d=n.tr.step(c);d.setSelection(O.create(d.doc,i)),t(d.scrollIntoView())}return!0}function Pt(n,e,t=!1){for(let r=n;r;r=e=="start"?r.firstChild:r.lastChild){if(r.isTextblock)return!0;if(t&&r.childCount!=1)return!1}return!1}var Xn=(n,e,t)=>{let{$head:r,empty:o}=n.selection,i=r;if(!o)return!1;if(r.parent.isTextblock){if(t?!t.endOfTextblock("backward",n):r.parentOffset>0)return!1;i=Wo(r)}let s=i&&i.nodeBefore;return!s||!w.isSelectable(s)?!1:(e&&e(n.tr.setSelection(w.create(n.doc,i.pos-s.nodeSize)).scrollIntoView()),!0)};function Wo(n){if(!n.parent.type.spec.isolating)for(let e=n.depth-1;e>=0;e--){if(n.index(e)>0)return n.doc.resolve(n.before(e+1));if(n.node(e).type.spec.isolating)break}return null}function fa(n,e){let{$cursor:t}=n.selection;return!t||(e?!e.endOfTextblock("forward",n):t.parentOffset{let r=fa(n,t);if(!r)return!1;let o=Ko(r);if(!o)return!1;let i=o.nodeAfter;if(ha(n,o,e,1))return!0;if(r.parent.content.size==0&&(Pt(i,"start")||w.isSelectable(i))){let s=Mt(n.doc,r.before(),r.after(),k.empty);if(s&&s.slice.size{let{$head:r,empty:o}=n.selection,i=r;if(!o)return!1;if(r.parent.isTextblock){if(t?!t.endOfTextblock("forward",n):r.parentOffset=0;e--){let t=n.node(e);if(n.index(e)+1{let t=n.selection,r=t instanceof w,o;if(r){if(t.node.isTextblock||!ae(n.doc,t.from))return!1;o=t.from}else if(o=it(n.doc,t.from,-1),o==null)return!1;if(e){let i=n.tr.join(o);r&&i.setSelection(w.create(i.doc,o-n.doc.resolve(o).nodeBefore.nodeSize)),e(i.scrollIntoView())}return!0},Jo=(n,e)=>{let t=n.selection,r;if(t instanceof w){if(t.node.isTextblock||!ae(n.doc,t.to))return!1;r=t.to}else if(r=it(n.doc,t.to,1),r==null)return!1;return e&&e(n.tr.join(r).scrollIntoView()),!0},qo=(n,e)=>{let{$from:t,$to:r}=n.selection,o=t.blockRange(r),i=o&&Se(o);return i==null?!1:(e&&e(n.tr.lift(o,i).scrollIntoView()),!0)},er=(n,e)=>{let{$head:t,$anchor:r}=n.selection;return!t.parent.type.spec.code||!t.sameParent(r)?!1:(e&&e(n.tr.insertText(` +`).scrollIntoView()),!0)};function Uo(n){for(let e=0;e{let{$head:t,$anchor:r}=n.selection;if(!t.parent.type.spec.code||!t.sameParent(r))return!1;let o=t.node(-1),i=t.indexAfter(-1),s=Uo(o.contentMatchAt(i));if(!s||!o.canReplaceWith(i,i,s))return!1;if(e){let l=t.after(),a=n.tr.replaceWith(l,l,s.createAndFill());a.setSelection(C.near(a.doc.resolve(l),1)),e(a.scrollIntoView())}return!0},nr=(n,e)=>{let t=n.selection,{$from:r,$to:o}=t;if(t instanceof Z||r.parent.inlineContent||o.parent.inlineContent)return!1;let i=Uo(o.parent.contentMatchAt(o.indexAfter()));if(!i||!i.isTextblock)return!1;if(e){let s=(!r.parentOffset&&o.index(){let{$cursor:t}=n.selection;if(!t||t.parent.content.size)return!1;if(t.depth>1&&t.after()!=t.end(-1)){let i=t.before();if(ie(n.doc,i))return e&&e(n.tr.split(i).scrollIntoView()),!0}let r=t.blockRange(),o=r&&Se(r);return o==null?!1:(e&&e(n.tr.lift(r,o).scrollIntoView()),!0)};function ua(n){return(e,t)=>{let{$from:r,$to:o}=e.selection;if(e.selection instanceof w&&e.selection.node.isBlock)return!r.parentOffset||!ie(e.doc,r.pos)?!1:(t&&t(e.tr.split(r.pos).scrollIntoView()),!0);if(!r.depth)return!1;let i=[],s,l,a=!1,c=!1;for(let p=r.depth;;p--)if(r.node(p).isBlock){a=r.end(p)==r.pos+(r.depth-p),c=r.start(p)==r.pos-(r.depth-p),l=Uo(r.node(p-1).contentMatchAt(r.indexAfter(p-1)));let m=n&&n(o.parent,a,r);i.unshift(m||(a&&l?{type:l}:null)),s=p;break}else{if(p==1)return!1;i.unshift(null)}let d=e.tr;(e.selection instanceof O||e.selection instanceof Z)&&d.deleteSelection();let f=d.mapping.map(r.pos),u=ie(d.doc,f,i.length,i);if(u||(i[0]=l?{type:l}:null,u=ie(d.doc,f,i.length,i)),!u)return!1;if(d.split(f,i.length,i),!a&&c&&r.node(s).type!=l){let p=d.mapping.map(r.before(s)),h=d.doc.resolve(p);l&&r.node(s-1).canReplaceWith(h.index(),h.index()+1,l)&&d.setNodeMarkup(d.mapping.map(r.before(s)),l)}return t&&t(d.scrollIntoView()),!0}}var Go=ua(),Tu=(n,e)=>Go(n,e&&(t=>{let r=n.storedMarks||n.selection.$to.parentOffset&&n.selection.$from.marks();r&&t.ensureMarks(r),e(t)})),Yo=(n,e)=>{let{$from:t,to:r}=n.selection,o,i=t.sharedDepth(r);return i==0?!1:(o=t.before(i),e&&e(n.tr.setSelection(w.create(n.doc,o))),!0)},pa=(n,e)=>(e&&e(n.tr.setSelection(new Z(n.doc))),!0);function Nu(n,e,t){let r=e.nodeBefore,o=e.nodeAfter,i=e.index();return!r||!o||!r.type.compatibleContent(o.type)?!1:!r.content.size&&e.parent.canReplace(i-1,i)?(t&&t(n.tr.delete(e.pos-r.nodeSize,e.pos).scrollIntoView()),!0):!e.parent.canReplace(i,i+1)||!(o.isTextblock||ae(n.doc,e.pos))?!1:(t&&t(n.tr.join(e.pos).scrollIntoView()),!0)}function ha(n,e,t,r){let o=e.nodeBefore,i=e.nodeAfter,s,l,a=o.type.spec.isolating||i.type.spec.isolating;if(!a&&Nu(n,e,t))return!0;let c=!a&&e.parent.canReplace(e.index(),e.index()+1);if(c&&(s=(l=o.contentMatchAt(o.childCount)).findWrapping(i.type))&&l.matchType(s[0]||i.type).validEnd){if(t){let p=e.pos+i.nodeSize,h=b.empty;for(let y=s.length-1;y>=0;y--)h=b.from(s[y].create(null,h));h=b.from(o.copy(h));let m=n.tr.step(new z(e.pos-1,p,e.pos,p,new k(h,1,0),s.length,!0)),g=m.doc.resolve(p+2*s.length);g.nodeAfter&&g.nodeAfter.type==o.type&&ae(m.doc,g.pos)&&m.join(g.pos),t(m.scrollIntoView())}return!0}let d=i.type.spec.isolating||r>0&&a?null:C.findFrom(e,1),f=d&&d.$from.blockRange(d.$to),u=f&&Se(f);if(u!=null&&u>=e.depth)return t&&t(n.tr.lift(f,u).scrollIntoView()),!0;if(c&&Pt(i,"start",!0)&&Pt(o,"end")){let p=o,h=[];for(;h.push(p),!p.isTextblock;)p=p.lastChild;let m=i,g=1;for(;!m.isTextblock;m=m.firstChild)g++;if(p.canReplace(p.childCount,p.childCount,m.content)){if(t){let y=b.empty;for(let M=h.length-1;M>=0;M--)y=b.from(h[M].copy(y));let S=n.tr.step(new z(e.pos-h.length,e.pos+i.nodeSize,e.pos+g,e.pos+i.nodeSize-g,new k(y,h.length,0),0,!0));t(S.scrollIntoView())}return!0}}return!1}function ma(n){return function(e,t){let r=e.selection,o=n<0?r.$from:r.$to,i=o.depth;for(;o.node(i).isInline;){if(!i)return!1;i--}return o.node(i).isTextblock?(t&&t(e.tr.setSelection(O.create(e.doc,n<0?o.start(i):o.end(i)))),!0):!1}}var or=ma(-1),ir=ma(1);function Xo(n,e=null){return function(t,r){let{$from:o,$to:i}=t.selection,s=o.blockRange(i),l=s&&ot(s,n,e);return l?(r&&r(t.tr.wrap(s,l).scrollIntoView()),!0):!1}}function sr(n,e=null){return function(t,r){let o=!1;for(let i=0;i{if(o)return!1;if(!(!a.isTextblock||a.hasMarkup(n,e)))if(a.type==n)o=!0;else{let d=t.doc.resolve(c),f=d.index();o=d.parent.canReplaceWith(f,f+1,n)}})}if(!o)return!1;if(r){let i=t.tr;for(let s=0;s{if(l||!r&&a.isAtom&&a.isInline&&c>=i.pos&&c+a.nodeSize<=s.pos)return!1;l=a.inlineContent&&a.type.allowsMarkType(t)}),l)return!0}return!1}function vu(n){let e=[];for(let t=0;t{if(i.isAtom&&i.content.size&&i.isInline&&s>=r.pos&&s+i.nodeSize<=o.pos)return s+1>r.pos&&e.push(new De(r,r.doc.resolve(s+1))),r=r.doc.resolve(s+1+i.content.size),!1}),r.poss.doc.rangeHasMark(p.$from.pos,p.$to.pos,n)):f=!d.every(p=>{let h=!1;return u.doc.nodesBetween(p.$from.pos,p.$to.pos,(m,g,y)=>{if(h)return!1;h=!n.isInSet(m.marks)&&!!y&&y.type.allowsMarkType(n)&&!(m.isText&&/^\s*$/.test(m.textBetween(Math.max(0,p.$from.pos-g),Math.min(m.nodeSize,p.$to.pos-g))))}),!h});for(let p=0;p{if(!t.isGeneric)return n(t);let r=[];for(let i=0;ir.push(c,d))}let o=[];for(let i=0;ii-s);for(let i=o.length-1;i>=0;i--)ae(t.doc,o[i])&&t.join(o[i]);n(t)}}function Iu(n,e){let t=Array.isArray(e)?r=>e.indexOf(r.type.name)>-1:e;return(r,o,i)=>n(r,o&&Ru(o,t),i)}function lr(...n){return function(e,t,r){for(let o=0;oLu,bulletList:()=>ya,liftListItem:()=>ni,listItem:()=>ba,orderedList:()=>ga,sinkListItem:()=>ri,splitListItem:()=>xa,splitListItemKeepMarks:()=>Vu,wrapInList:()=>ti,wrapRangeInList:()=>ka});var Bu=["ol",0],zu=["ul",0],Fu=["li",0],ga={attrs:{order:{default:1,validate:"number"}},parseDOM:[{tag:"ol",getAttrs(n){return{order:n.hasAttribute("start")?+n.getAttribute("start"):1}}}],toDOM(n){return n.attrs.order==1?Bu:["ol",{start:n.attrs.order},0]}},ya={parseDOM:[{tag:"ul"}],toDOM(){return zu}},ba={parseDOM:[{tag:"li"}],toDOM(){return Fu},defining:!0};function ei(n,e){let t={};for(let r in n)t[r]=n[r];for(let r in e)t[r]=e[r];return t}function Lu(n,e,t){return n.append({ordered_list:ei(ga,{content:"list_item+",group:t}),bullet_list:ei(ya,{content:"list_item+",group:t}),list_item:ei(ba,{content:e})})}function ti(n,e=null){return function(t,r){let{$from:o,$to:i}=t.selection,s=o.blockRange(i);if(!s)return!1;let l=r?t.tr:null;return ka(l,s,n,e)?(r&&r(l.scrollIntoView()),!0):!1}}function ka(n,e,t,r=null){let o=!1,i=e,s=e.$from.doc;if(e.depth>=2&&e.$from.node(e.depth-1).type.compatibleContent(t)&&e.startIndex==0){if(e.$from.index(e.depth-1)==0)return!1;let a=s.resolve(e.start-2);i=new We(a,a,e.depth),e.endIndex=0;d--)i=b.from(t[d].type.create(t[d].attrs,i));n.step(new z(e.start-(r?2:0),e.end,e.start,e.end,new k(i,0,0),t.length,!0));let s=0;for(let d=0;d=o.depth-3;y--)f=b.from(o.node(y).copy(f));let p=o.indexAfter(-1){if(g>-1)return!1;y.isTextblock&&y.content.size==0&&(g=S+1)}),g>-1&&m.setSelection(C.near(m.doc.resolve(g))),r(m.scrollIntoView())}return!0}let a=i.pos==o.end()?l.contentMatchAt(0).defaultType:null,c=t.tr.delete(o.pos,i.pos),d=a?[e?{type:n,attrs:e}:null,{type:a}]:void 0;return ie(c.doc,o.pos,2,d)?(r&&r(c.split(o.pos,2,d).scrollIntoView()),!0):!1}}function Vu(n,e){let t=xa(n,e);return(r,o)=>t(r,o&&(i=>{let s=r.storedMarks||r.selection.$to.parentOffset&&r.selection.$from.marks();s&&i.ensureMarks(s),o(i)}))}function ni(n){return function(e,t){let{$from:r,$to:o}=e.selection,i=r.blockRange(o,s=>s.childCount>0&&s.firstChild.type==n);return i?t?r.node(i.depth-1).type==n?ju(e,t,n,i):Wu(e,t,i):!0:!1}}function ju(n,e,t,r){let o=n.tr,i=r.end,s=r.$to.end(r.depth);im;h--)p-=o.child(h).nodeSize,r.delete(p-1,p+1);let i=r.doc.resolve(t.start),s=i.nodeAfter;if(r.mapping.map(t.end)!=t.start+i.nodeAfter.nodeSize)return!1;let l=t.startIndex==0,a=t.endIndex==o.childCount,c=i.node(-1),d=i.index(-1);if(!c.canReplace(d+(l?0:1),d+1,s.content.append(a?b.empty:b.from(o))))return!1;let f=i.pos,u=f+s.nodeSize;return r.step(new z(f-(l?1:0),u+(a?1:0),f+1,u-1,new k((l?b.empty:b.from(o.copy(b.empty))).append(a?b.empty:b.from(o.copy(b.empty))),l?0:1,a?0:1),l?0:1)),e(r.scrollIntoView()),!0}function ri(n){return function(e,t){let{$from:r,$to:o}=e.selection,i=r.blockRange(o,c=>c.childCount>0&&c.firstChild.type==n);if(!i)return!1;let s=i.startIndex;if(s==0)return!1;let l=i.parent,a=l.child(s-1);if(a.type!=n)return!1;if(t){let c=a.lastChild&&a.lastChild.type==l.type,d=b.from(c?n.create():null),f=new k(b.from(n.create(null,b.from(l.type.create(null,d)))),c?3:1,0),u=i.start,p=i.end;t(e.tr.step(new z(u-(c?3:1),p,u,p,f,1,!0)).scrollIntoView())}return!0}}function gn(n){let{state:e,transaction:t}=n,{selection:r}=t,{doc:o}=t,{storedMarks:i}=t;return{...e,apply:e.apply.bind(e),applyTransaction:e.applyTransaction.bind(e),plugins:e.plugins,schema:e.schema,reconfigure:e.reconfigure.bind(e),toJSON:e.toJSON.bind(e),get storedMarks(){return i},get selection(){return r},get doc(){return o},get tr(){return r=t.selection,o=t.doc,i=t.storedMarks,t}}}var mt=class{constructor(e){this.editor=e.editor,this.rawCommands=this.editor.extensionManager.commands,this.customState=e.state}get hasCustomState(){return!!this.customState}get state(){return this.customState||this.editor.state}get commands(){let{rawCommands:e,editor:t,state:r}=this,{view:o}=t,{tr:i}=r,s=this.buildProps(i);return Object.fromEntries(Object.entries(e).map(([l,a])=>[l,(...d)=>{let f=a(...d)(s);return!i.getMeta("preventDispatch")&&!this.hasCustomState&&o.dispatch(i),f}]))}get chain(){return()=>this.createChain()}get can(){return()=>this.createCan()}createChain(e,t=!0){let{rawCommands:r,editor:o,state:i}=this,{view:s}=o,l=[],a=!!e,c=e||i.tr,d=()=>(!a&&t&&!c.getMeta("preventDispatch")&&!this.hasCustomState&&s.dispatch(c),l.every(u=>u===!0)),f={...Object.fromEntries(Object.entries(r).map(([u,p])=>[u,(...m)=>{let g=this.buildProps(c,t),y=p(...m)(g);return l.push(y),f}])),run:d};return f}createCan(e){let{rawCommands:t,state:r}=this,o=!1,i=e||r.tr,s=this.buildProps(i,o);return{...Object.fromEntries(Object.entries(t).map(([a,c])=>[a,(...d)=>c(...d)({...s,dispatch:void 0})])),chain:()=>this.createChain(i,o)}}buildProps(e,t=!0){let{rawCommands:r,editor:o,state:i}=this,{view:s}=o,l={tr:e,editor:o,view:s,state:gn({state:i,transaction:e}),dispatch:t?()=>{}:void 0,chain:()=>this.createChain(e,t),can:()=>this.createCan(e),get commands(){return Object.fromEntries(Object.entries(r).map(([a,c])=>[a,(...d)=>c(...d)(l)]))}};return l}},li=class{constructor(){this.callbacks={}}on(e,t){return this.callbacks[e]||(this.callbacks[e]=[]),this.callbacks[e].push(t),this}emit(e,...t){let r=this.callbacks[e];return r&&r.forEach(o=>o.apply(this,t)),this}off(e,t){let r=this.callbacks[e];return r&&(t?this.callbacks[e]=r.filter(o=>o!==t):delete this.callbacks[e]),this}once(e,t){let r=(...o)=>{this.off(e,r),t.apply(this,o)};return this.on(e,r)}removeAllListeners(){this.callbacks={}}};function x(n,e,t){return n.config[e]===void 0&&n.parent?x(n.parent,e,t):typeof n.config[e]=="function"?n.config[e].bind({...t,parent:n.parent?x(n.parent,e,t):null}):n.config[e]}function yn(n){let e=n.filter(o=>o.type==="extension"),t=n.filter(o=>o.type==="node"),r=n.filter(o=>o.type==="mark");return{baseExtensions:e,nodeExtensions:t,markExtensions:r}}function yi(n){let e=[],{nodeExtensions:t,markExtensions:r}=yn(n),o=[...t,...r],i={default:null,rendered:!0,renderHTML:null,parseHTML:null,keepOnSplit:!0,isRequired:!1};return n.forEach(s=>{let l={name:s.name,options:s.options,storage:s.storage,extensions:o},a=x(s,"addGlobalAttributes",l);if(!a)return;a().forEach(d=>{d.types.forEach(f=>{Object.entries(d.attributes).forEach(([u,p])=>{e.push({type:f,name:u,attribute:{...i,...p}})})})})}),o.forEach(s=>{let l={name:s.name,options:s.options,storage:s.storage},a=x(s,"addAttributes",l);if(!a)return;let c=a();Object.entries(c).forEach(([d,f])=>{let u={...i,...f};typeof u?.default=="function"&&(u.default=u.default()),u?.isRequired&&u?.default===void 0&&delete u.default,e.push({type:s.name,name:d,attribute:u})})}),e}function V(n,e){if(typeof n=="string"){if(!e.nodes[n])throw Error(`There is no node type named '${n}'. Maybe you forgot to add the extension?`);return e.nodes[n]}return n}function Ma(...n){return n.filter(e=>!!e).reduce((e,t)=>{let r={...e};return Object.entries(t).forEach(([o,i])=>{if(!r[o]){r[o]=i;return}if(o==="class"){let l=i?String(i).split(" "):[],a=r[o]?r[o].split(" "):[],c=l.filter(d=>!a.includes(d));r[o]=[...a,...c].join(" ")}else if(o==="style"){let l=i?i.split(";").map(d=>d.trim()).filter(Boolean):[],a=r[o]?r[o].split(";").map(d=>d.trim()).filter(Boolean):[],c=new Map;a.forEach(d=>{let[f,u]=d.split(":").map(p=>p.trim());c.set(f,u)}),l.forEach(d=>{let[f,u]=d.split(":").map(p=>p.trim());c.set(f,u)}),r[o]=Array.from(c.entries()).map(([d,f])=>`${d}: ${f}`).join("; ")}else r[o]=i}),r},{})}function fr(n,e){return e.filter(t=>t.type===n.type.name).filter(t=>t.attribute.rendered).map(t=>t.attribute.renderHTML?t.attribute.renderHTML(n.attrs)||{}:{[t.name]:n.attrs[t.name]}).reduce((t,r)=>Ma(t,r),{})}function bi(n){return typeof n=="function"}function N(n,e=void 0,...t){return bi(n)?e?n.bind(e)(...t):n(...t):n}function Ea(n={}){return Object.keys(n).length===0&&n.constructor===Object}function Oa(n){return typeof n!="string"?n:n.match(/^[+-]?(?:\d*\.)?\d+$/)?Number(n):n==="true"?!0:n==="false"?!1:n}function ai(n,e){return"style"in n?n:{...n,getAttrs:t=>{let r=n.getAttrs?n.getAttrs(t):n.attrs;if(r===!1)return!1;let o=e.reduce((i,s)=>{let l=s.attribute.parseHTML?s.attribute.parseHTML(t):Oa(t.getAttribute(s.name));return l==null?i:{...i,[s.name]:l}},{});return{...r,...o}}}}function Sa(n){return Object.fromEntries(Object.entries(n).filter(([e,t])=>e==="attrs"&&Ea(t)?!1:t!=null))}function ki(n,e){var t;let r=yi(n),{nodeExtensions:o,markExtensions:i}=yn(n),s=(t=o.find(c=>x(c,"topNode")))===null||t===void 0?void 0:t.name,l=Object.fromEntries(o.map(c=>{let d=r.filter(y=>y.type===c.name),f={name:c.name,options:c.options,storage:c.storage,editor:e},u=n.reduce((y,S)=>{let M=x(S,"extendNodeSchema",f);return{...y,...M?M(c):{}}},{}),p=Sa({...u,content:N(x(c,"content",f)),marks:N(x(c,"marks",f)),group:N(x(c,"group",f)),inline:N(x(c,"inline",f)),atom:N(x(c,"atom",f)),selectable:N(x(c,"selectable",f)),draggable:N(x(c,"draggable",f)),code:N(x(c,"code",f)),whitespace:N(x(c,"whitespace",f)),linebreakReplacement:N(x(c,"linebreakReplacement",f)),defining:N(x(c,"defining",f)),isolating:N(x(c,"isolating",f)),attrs:Object.fromEntries(d.map(y=>{var S;return[y.name,{default:(S=y?.attribute)===null||S===void 0?void 0:S.default}]}))}),h=N(x(c,"parseHTML",f));h&&(p.parseDOM=h.map(y=>ai(y,d)));let m=x(c,"renderHTML",f);m&&(p.toDOM=y=>m({node:y,HTMLAttributes:fr(y,d)}));let g=x(c,"renderText",f);return g&&(p.toText=g),[c.name,p]})),a=Object.fromEntries(i.map(c=>{let d=r.filter(g=>g.type===c.name),f={name:c.name,options:c.options,storage:c.storage,editor:e},u=n.reduce((g,y)=>{let S=x(y,"extendMarkSchema",f);return{...g,...S?S(c):{}}},{}),p=Sa({...u,inclusive:N(x(c,"inclusive",f)),excludes:N(x(c,"excludes",f)),group:N(x(c,"group",f)),spanning:N(x(c,"spanning",f)),code:N(x(c,"code",f)),attrs:Object.fromEntries(d.map(g=>{var y;return[g.name,{default:(y=g?.attribute)===null||y===void 0?void 0:y.default}]}))}),h=N(x(c,"parseHTML",f));h&&(p.parseDOM=h.map(g=>ai(g,d)));let m=x(c,"renderHTML",f);return m&&(p.toDOM=g=>m({mark:g,HTMLAttributes:fr(g,d)})),[c.name,p]}));return new kt({topNode:s,nodes:l,marks:a})}function dr(n,e){return e.nodes[n]||e.marks[n]||null}function ci(n,e){return Array.isArray(e)?e.some(t=>(typeof t=="string"?t:t.name)===n.name):e}function bn(n,e){let t=ke.fromSchema(e).serializeFragment(n),o=document.implementation.createHTMLDocument().createElement("div");return o.appendChild(t),o.innerHTML}var Ta=(n,e=500)=>{let t="",r=n.parentOffset;return n.parent.nodesBetween(Math.max(0,r-e),r,(o,i,s,l)=>{var a,c;let d=((c=(a=o.type.spec).toText)===null||c===void 0?void 0:c.call(a,{node:o,pos:i,parent:s,index:l}))||o.textContent||"%leaf%";t+=o.isAtom&&!o.isText?d:d.slice(0,Math.max(0,r-i))}),t};function yr(n){return Object.prototype.toString.call(n)==="[object RegExp]"}var Ze=class{constructor(e){this.find=e.find,this.handler=e.handler}},Ku=(n,e)=>{if(yr(e))return e.exec(n);let t=e(n);if(!t)return null;let r=[t.text];return r.index=t.index,r.input=n,r.data=t.data,t.replaceWith&&(t.text.includes(t.replaceWith)||console.warn('[tiptap warn]: "inputRuleMatch.replaceWith" must be part of "inputRuleMatch.text".'),r.push(t.replaceWith)),r};function ar(n){var e;let{editor:t,from:r,to:o,text:i,rules:s,plugin:l}=n,{view:a}=t;if(a.composing)return!1;let c=a.state.doc.resolve(r);if(c.parent.type.spec.code||!((e=c.nodeBefore||c.nodeAfter)===null||e===void 0)&&e.marks.find(u=>u.type.spec.code))return!1;let d=!1,f=Ta(c)+i;return s.forEach(u=>{if(d)return;let p=Ku(f,u.find);if(!p)return;let h=a.state.tr,m=gn({state:a.state,transaction:h}),g={from:r-(p[0].length-i.length),to:o},{commands:y,chain:S,can:M}=new mt({editor:t,state:m});u.handler({state:m,range:g,match:p,commands:y,chain:S,can:M})===null||!h.steps.length||(h.setMeta(l,{transform:h,from:r,to:o,text:i}),a.dispatch(h),d=!0)}),d}function Na(n){let{editor:e,rules:t}=n,r=new B({state:{init(){return null},apply(o,i,s){let l=o.getMeta(r);if(l)return l;let a=o.getMeta("applyInputRules");return a&&setTimeout(()=>{let{text:d}=a;typeof d=="string"?d=d:d=bn(b.from(d),s.schema);let{from:f}=a,u=f+d.length;ar({editor:e,from:f,to:u,text:d,rules:t,plugin:r})}),o.selectionSet||o.docChanged?null:i}},props:{handleTextInput(o,i,s,l){return ar({editor:e,from:i,to:s,text:l,rules:t,plugin:r})},handleDOMEvents:{compositionend:o=>(setTimeout(()=>{let{$cursor:i}=o.state.selection;i&&ar({editor:e,from:i.pos,to:i.pos,text:"",rules:t,plugin:r})}),!1)},handleKeyDown(o,i){if(i.key!=="Enter")return!1;let{$cursor:s}=o.state.selection;return s?ar({editor:e,from:s.pos,to:s.pos,text:` +`,rules:t,plugin:r}):!1}},isInputRules:!0});return r}function Hu(n){return Object.prototype.toString.call(n).slice(8,-1)}function pn(n){return Hu(n)!=="Object"?!1:n.constructor===Object&&Object.getPrototypeOf(n)===Object.prototype}function kn(n,e){let t={...n};return pn(n)&&pn(e)&&Object.keys(e).forEach(r=>{pn(e[r])&&pn(n[r])?t[r]=kn(n[r],e[r]):t[r]=e[r]}),t}var ur=class n{constructor(e={}){this.type="mark",this.name="mark",this.parent=null,this.child=null,this.config={name:this.name,defaultOptions:{}},this.config={...this.config,...e},this.name=this.config.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`),this.options=this.config.defaultOptions,this.config.addOptions&&(this.options=N(x(this,"addOptions",{name:this.name}))),this.storage=N(x(this,"addStorage",{name:this.name,options:this.options}))||{}}static create(e={}){return new n(e)}configure(e={}){let t=this.extend({...this.config,addOptions:()=>kn(this.options,e)});return t.name=this.name,t.parent=this.parent,t}extend(e={}){let t=new n(e);return t.parent=this,this.child=t,t.name=e.name?e.name:t.parent.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${t.name}".`),t.options=N(x(t,"addOptions",{name:t.name})),t.storage=N(x(t,"addStorage",{name:t.name,options:t.options})),t}static handleExit({editor:e,mark:t}){let{tr:r}=e.state,o=e.state.selection.$from;if(o.pos===o.end()){let s=o.marks();if(!!!s.find(c=>c?.type.name===t.name))return!1;let a=s.find(c=>c?.type.name===t.name);return a&&r.removeStoredMark(a),r.insertText(" ",o.pos),e.view.dispatch(r),!0}return!1}};function Aa(n){return typeof n=="number"}var zt=class{constructor(e){this.find=e.find,this.handler=e.handler}},Ju=(n,e,t)=>{if(yr(e))return[...n.matchAll(e)];let r=e(n,t);return r?r.map(o=>{let i=[o.text];return i.index=o.index,i.input=n,i.data=o.data,o.replaceWith&&(o.text.includes(o.replaceWith)||console.warn('[tiptap warn]: "pasteRuleMatch.replaceWith" must be part of "pasteRuleMatch.text".'),i.push(o.replaceWith)),i}):[]};function qu(n){let{editor:e,state:t,from:r,to:o,rule:i,pasteEvent:s,dropEvent:l}=n,{commands:a,chain:c,can:d}=new mt({editor:e,state:t}),f=[];return t.doc.nodesBetween(r,o,(p,h)=>{if(!p.isTextblock||p.type.spec.code)return;let m=Math.max(r,h),g=Math.min(o,h+p.content.size),y=p.textBetween(m-h,g-h,void 0,"\uFFFC");Ju(y,i.find,s).forEach(M=>{if(M.index===void 0)return;let v=m+M.index+1,A=v+M[0].length,P={from:t.tr.mapping.map(v),to:t.tr.mapping.map(A)},T=i.handler({state:t,range:P,match:M,commands:a,chain:c,can:d,pasteEvent:s,dropEvent:l});f.push(T)})}),f.every(p=>p!==null)}var cr=null,Uu=n=>{var e;let t=new ClipboardEvent("paste",{clipboardData:new DataTransfer});return(e=t.clipboardData)===null||e===void 0||e.setData("text/html",n),t};function va(n){let{editor:e,rules:t}=n,r=null,o=!1,i=!1,s=typeof ClipboardEvent<"u"?new ClipboardEvent("paste"):null,l;try{l=typeof DragEvent<"u"?new DragEvent("drop"):null}catch{l=null}let a=({state:d,from:f,to:u,rule:p,pasteEvt:h})=>{let m=d.tr,g=gn({state:d,transaction:m});if(!(!qu({editor:e,state:g,from:Math.max(f-1,0),to:u.b-1,rule:p,pasteEvent:h,dropEvent:l})||!m.steps.length)){try{l=typeof DragEvent<"u"?new DragEvent("drop"):null}catch{l=null}return s=typeof ClipboardEvent<"u"?new ClipboardEvent("paste"):null,m}};return t.map(d=>new B({view(f){let u=h=>{var m;r=!((m=f.dom.parentElement)===null||m===void 0)&&m.contains(h.target)?f.dom.parentElement:null,r&&(cr=e)},p=()=>{cr&&(cr=null)};return window.addEventListener("dragstart",u),window.addEventListener("dragend",p),{destroy(){window.removeEventListener("dragstart",u),window.removeEventListener("dragend",p)}}},props:{handleDOMEvents:{drop:(f,u)=>{if(i=r===f.dom.parentElement,l=u,!i){let p=cr;p?.isEditable&&setTimeout(()=>{let h=p.state.selection;h&&p.commands.deleteRange({from:h.from,to:h.to})},10)}return!1},paste:(f,u)=>{var p;let h=(p=u.clipboardData)===null||p===void 0?void 0:p.getData("text/html");return s=u,o=!!h?.includes("data-pm-slice"),!1}}},appendTransaction:(f,u,p)=>{let h=f[0],m=h.getMeta("uiEvent")==="paste"&&!o,g=h.getMeta("uiEvent")==="drop"&&!i,y=h.getMeta("applyPasteRules"),S=!!y;if(!m&&!g&&!S)return;if(S){let{text:A}=y;typeof A=="string"?A=A:A=bn(b.from(A),p.schema);let{from:P}=y,T=P+A.length,D=Uu(A);return a({rule:d,state:p,from:P,to:{b:T},pasteEvt:D})}let M=u.doc.content.findDiffStart(p.doc.content),v=u.doc.content.findDiffEnd(p.doc.content);if(!(!Aa(M)||!v||M===v.b))return a({rule:d,state:p,from:M,to:v,pasteEvt:s})}}))}function Da(n){let e=n.filter((t,r)=>n.indexOf(t)!==r);return Array.from(new Set(e))}var pr=class n{constructor(e,t){this.splittableMarks=[],this.editor=t,this.extensions=n.resolve(e),this.schema=ki(this.extensions,t),this.setupExtensions()}static resolve(e){let t=n.sort(n.flatten(e)),r=Da(t.map(o=>o.name));return r.length&&console.warn(`[tiptap warn]: Duplicate extension names found: [${r.map(o=>`'${o}'`).join(", ")}]. This can lead to issues.`),t}static flatten(e){return e.map(t=>{let r={name:t.name,options:t.options,storage:t.storage},o=x(t,"addExtensions",r);return o?[t,...this.flatten(o())]:t}).flat(10)}static sort(e){return e.sort((r,o)=>{let i=x(r,"priority")||100,s=x(o,"priority")||100;return i>s?-1:i{let r={name:t.name,options:t.options,storage:t.storage,editor:this.editor,type:dr(t.name,this.schema)},o=x(t,"addCommands",r);return o?{...e,...o()}:e},{})}get plugins(){let{editor:e}=this,t=n.sort([...this.extensions].reverse()),r=[],o=[],i=t.map(s=>{let l={name:s.name,options:s.options,storage:s.storage,editor:e,type:dr(s.name,this.schema)},a=[],c=x(s,"addKeyboardShortcuts",l),d={};if(s.type==="mark"&&x(s,"exitable",l)&&(d.ArrowRight=()=>ur.handleExit({editor:e,mark:s})),c){let m=Object.fromEntries(Object.entries(c()).map(([g,y])=>[g,()=>y({editor:e})]));d={...d,...m}}let f=Bo(d);a.push(f);let u=x(s,"addInputRules",l);ci(s,e.options.enableInputRules)&&u&&r.push(...u());let p=x(s,"addPasteRules",l);ci(s,e.options.enablePasteRules)&&p&&o.push(...p());let h=x(s,"addProseMirrorPlugins",l);if(h){let m=h();a.push(...m)}return a}).flat();return[Na({editor:e,rules:r}),...va({editor:e,rules:o}),...i]}get attributes(){return yi(this.extensions)}get nodeViews(){let{editor:e}=this,{nodeExtensions:t}=yn(this.extensions);return Object.fromEntries(t.filter(r=>!!x(r,"addNodeView")).map(r=>{let o=this.attributes.filter(a=>a.type===r.name),i={name:r.name,options:r.options,storage:r.storage,editor:e,type:V(r.name,this.schema)},s=x(r,"addNodeView",i);if(!s)return[];let l=(a,c,d,f,u)=>{let p=fr(a,o);return s()({node:a,view:c,getPos:d,decorations:f,innerDecorations:u,editor:e,extension:r,HTMLAttributes:p})};return[r.name,l]}))}setupExtensions(){this.extensions.forEach(e=>{var t;this.editor.extensionStorage[e.name]=e.storage;let r={name:e.name,options:e.options,storage:e.storage,editor:this.editor,type:dr(e.name,this.schema)};e.type==="mark"&&(!((t=N(x(e,"keepOnSplit",r)))!==null&&t!==void 0)||t)&&this.splittableMarks.push(e.name);let o=x(e,"onBeforeCreate",r),i=x(e,"onCreate",r),s=x(e,"onUpdate",r),l=x(e,"onSelectionUpdate",r),a=x(e,"onTransaction",r),c=x(e,"onFocus",r),d=x(e,"onBlur",r),f=x(e,"onDestroy",r);o&&this.editor.on("beforeCreate",o),i&&this.editor.on("create",i),s&&this.editor.on("update",s),l&&this.editor.on("selectionUpdate",l),a&&this.editor.on("transaction",a),c&&this.editor.on("focus",c),d&&this.editor.on("blur",d),f&&this.editor.on("destroy",f)})}},ge=class n{constructor(e={}){this.type="extension",this.name="extension",this.parent=null,this.child=null,this.config={name:this.name,defaultOptions:{}},this.config={...this.config,...e},this.name=this.config.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`),this.options=this.config.defaultOptions,this.config.addOptions&&(this.options=N(x(this,"addOptions",{name:this.name}))),this.storage=N(x(this,"addStorage",{name:this.name,options:this.options}))||{}}static create(e={}){return new n(e)}configure(e={}){let t=this.extend({...this.config,addOptions:()=>kn(this.options,e)});return t.name=this.name,t.parent=this.parent,t}extend(e={}){let t=new n({...this.config,...e});return t.parent=this,this.child=t,t.name=e.name?e.name:t.parent.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${t.name}".`),t.options=N(x(t,"addOptions",{name:t.name})),t.storage=N(x(t,"addStorage",{name:t.name,options:t.options})),t}};function xi(n,e,t){let{from:r,to:o}=e,{blockSeparator:i=` -`,textSerializers:s={}}=t||{},l="";return n.nodesBetween(r,i,(a,c,d,u)=>{var f;a.isBlock&&c>r&&(l+=o);let p=s?.[a.type.name];if(p)return d&&(l+=p({node:a,pos:c,parent:d,index:u,range:e})),!1;a.isText&&(l+=(f=a?.text)===null||f===void 0?void 0:f.slice(Math.max(r,c)-c,i-c))}),l}function nr(n){return Object.fromEntries(Object.entries(n.nodes).filter(([,e])=>e.spec.toText).map(([e,t])=>[e,t.spec.toText]))}var Xl=ue.create({name:"clipboardTextSerializer",addOptions(){return{blockSeparator:void 0}},addProseMirrorPlugins(){return[new P({key:new te("clipboardTextSerializer"),props:{clipboardTextSerializer:()=>{let{editor:n}=this,{state:e,schema:t}=n,{doc:r,selection:i}=e,{ranges:o}=i,s=Math.min(...o.map(d=>d.$from.pos)),l=Math.max(...o.map(d=>d.$to.pos)),a=nr(t);return Yi(r,{from:s,to:l},{...this.options.blockSeparator!==void 0?{blockSeparator:this.options.blockSeparator}:{},textSerializers:a})}}})]}}),Iu=()=>({editor:n,view:e})=>(requestAnimationFrame(()=>{var t;n.isDestroyed||(e.dom.blur(),(t=window?.getSelection())===null||t===void 0||t.removeAllRanges())}),!0),Pu=(n=!1)=>({commands:e})=>e.setContent("",n),_u=()=>({state:n,tr:e,dispatch:t})=>{let{selection:r}=e,{ranges:i}=r;return t&&i.forEach(({$from:o,$to:s})=>{n.doc.nodesBetween(o.pos,s.pos,(l,a)=>{if(l.type.isText)return;let{doc:c,mapping:d}=e,u=c.resolve(d.map(a)),f=c.resolve(d.map(a+l.nodeSize)),p=u.blockRange(f);if(!p)return;let h=me(p);if(l.type.isTextblock){let{defaultType:m}=u.parent.contentMatchAt(u.index());e.setNodeMarkup(p.start,m)}(h||h===0)&&e.lift(p,h)})}),!0},Bu=n=>e=>n(e),zu=()=>({state:n,dispatch:e})=>Vn(n,e),Fu=(n,e)=>({editor:t,tr:r})=>{let{state:i}=t,o=i.doc.slice(n.from,n.to);r.deleteRange(n.from,n.to);let s=r.mapping.map(e);return r.insert(s,o.content),r.setSelection(new T(r.doc.resolve(Math.max(s-1,0)))),!0},Lu=()=>({tr:n,dispatch:e})=>{let{selection:t}=n,r=t.$anchor.node();if(r.content.size>0)return!1;let i=n.selection.$anchor;for(let o=i.depth;o>0;o-=1)if(i.node(o).type===r.type){if(e){let l=i.before(o),a=i.after(o);n.delete(l,a).scrollIntoView()}return!0}return!1},Vu=n=>({tr:e,state:t,dispatch:r})=>{let i=F(n,t.schema),o=e.selection.$anchor;for(let s=o.depth;s>0;s-=1)if(o.node(s).type===i){if(r){let a=o.before(s),c=o.after(s);e.delete(a,c).scrollIntoView()}return!0}return!1},$u=n=>({tr:e,dispatch:t})=>{let{from:r,to:i}=n;return t&&e.delete(r,i),!0},ju=()=>({state:n,dispatch:e})=>Zt(n,e),Wu=()=>({commands:n})=>n.keyboardShortcut("Enter"),Ku=()=>({state:n,dispatch:e})=>Ln(n,e);function tn(n,e,t={strict:!0}){let r=Object.keys(e);return r.length?r.every(i=>t.strict?e[i]===n[i]:tr(e[i])?e[i].test(n[i]):e[i]===n[i]):!0}function Zl(n,e,t={}){return n.find(r=>r.type===e&&tn(Object.fromEntries(Object.keys(t).map(i=>[i,r.attrs[i]])),t))}function $l(n,e,t={}){return!!Zl(n,e,t)}function rr(n,e,t){var r;if(!n||!e)return;let i=n.parent.childAfter(n.parentOffset);if((!i.node||!i.node.marks.some(d=>d.type===e))&&(i=n.parent.childBefore(n.parentOffset)),!i.node||!i.node.marks.some(d=>d.type===e)||(t=t||((r=i.node.marks[0])===null||r===void 0?void 0:r.attrs),!Zl([...i.node.marks],e,t)))return;let s=i.index,l=n.start()+i.offset,a=s+1,c=l+i.node.nodeSize;for(;s>0&&$l([...n.parent.child(s-1).marks],e,t);)s-=1,l-=n.parent.child(s).nodeSize;for(;a({tr:t,state:r,dispatch:i})=>{let o=De(n,r.schema),{doc:s,selection:l}=t,{$from:a,from:c,to:d}=l;if(i){let u=rr(a,o,e);if(u&&u.from<=c&&u.to>=d){let f=T.create(s,u.from,u.to);t.setSelection(f)}}return!0},Hu=n=>e=>{let t=typeof n=="function"?n(e):n;for(let r=0;r({editor:t,view:r,tr:i,dispatch:o})=>{e={scrollIntoView:!0,...e};let s=()=>{(Tt()||Vi())&&r.dom.focus(),requestAnimationFrame(()=>{t.isDestroyed||(r.focus(),Ql()&&!Tt()&&!Vi()&&r.dom.focus({preventScroll:!0}))})};if(r.hasFocus()&&n===null||n===!1)return!0;if(o&&n===null&&!Xi(t.state.selection))return s(),!0;let l=Zi(i.doc,n)||t.state.selection,a=t.state.selection.eq(l);return o&&(a||i.setSelection(l),a&&i.storedMarks&&i.setStoredMarks(i.storedMarks),s()),!0},Uu=(n,e)=>t=>n.every((r,i)=>e(r,{...t,index:i})),Gu=(n,e)=>({tr:t,commands:r})=>r.insertContentAt({from:t.selection.from,to:t.selection.to},n,e),ea=n=>{let e=n.childNodes;for(let t=e.length-1;t>=0;t-=1){let r=e[t];r.nodeType===3&&r.nodeValue&&/^(\n\s\s|\n)$/.test(r.nodeValue)?n.removeChild(r):r.nodeType===1&&ea(r)}return n};function Et(n){let e=`${n}`,t=new window.DOMParser().parseFromString(e,"text/html").body;return ea(t)}function Nt(n,e,t){if(n instanceof Y||n instanceof k)return n;t={slice:!0,parseOptions:{},...t};let r=typeof n=="object"&&n!==null,i=typeof n=="string";if(r)try{if(Array.isArray(n)&&n.length>0)return k.fromArray(n.map(l=>e.nodeFromJSON(l)));let s=e.nodeFromJSON(n);return t.errorOnInvalidContent&&s.check(),s}catch(o){if(t.errorOnInvalidContent)throw new Error("[tiptap error]: Invalid JSON content",{cause:o});return console.warn("[tiptap warn]: Invalid content.","Passed value:",n,"Error:",o),Nt("",e,t)}if(i){if(t.errorOnInvalidContent){let s=!1,l="",a=new ct({topNode:e.spec.topNode,marks:e.spec.marks,nodes:e.spec.nodes.append({__tiptap__private__unknown__catch__all__node:{content:"inline*",group:"block",parseDOM:[{tag:"*",getAttrs:c=>(s=!0,l=typeof c=="string"?c:c.outerHTML,null)}]}})});if(t.slice?ce.fromSchema(a).parseSlice(Et(n),t.parseOptions):ce.fromSchema(a).parse(Et(n),t.parseOptions),t.errorOnInvalidContent&&s)throw new Error("[tiptap error]: Invalid HTML content",{cause:new Error(`Invalid element found: ${l}`)})}let o=ce.fromSchema(e);return t.slice?o.parseSlice(Et(n),t.parseOptions).content:o.parse(Et(n),t.parseOptions)}return Nt("",e,t)}function ta(n,e,t){let r=n.steps.length-1;if(r{s===0&&(s=d)}),n.setSelection(E.near(n.doc.resolve(s),t))}var Yu=n=>!("type"in n),Xu=(n,e,t)=>({tr:r,dispatch:i,editor:o})=>{var s;if(i){t={parseOptions:o.options.parseOptions,updateSelection:!0,applyInputRules:!1,applyPasteRules:!1,...t};let l,a=g=>{o.emit("contentError",{editor:o,error:g,disableCollaboration:()=>{o.storage.collaboration&&(o.storage.collaboration.isDisabled=!0)}})},c={preserveWhitespace:"full",...t.parseOptions};if(!t.errorOnInvalidContent&&!o.options.enableContentCheck&&o.options.emitContentError)try{Nt(e,o.schema,{parseOptions:c,errorOnInvalidContent:!0})}catch(g){a(g)}try{l=Nt(e,o.schema,{parseOptions:c,errorOnInvalidContent:(s=t.errorOnInvalidContent)!==null&&s!==void 0?s:o.options.enableContentCheck})}catch(g){return a(g),!1}let{from:d,to:u}=typeof n=="number"?{from:n,to:n}:{from:n.from,to:n.to},f=!0,p=!0;if((Yu(l)?l:[l]).forEach(g=>{g.check(),f=f?g.isText&&g.marks.length===0:!1,p=p?g.isBlock:!1}),d===u&&p){let{parent:g}=r.doc.resolve(d);g.isTextblock&&!g.type.spec.code&&!g.childCount&&(d-=1,u+=1)}let m;if(f){if(Array.isArray(e))m=e.map(g=>g.text||"").join("");else if(e instanceof k){let g="";e.forEach(y=>{y.text&&(g+=y.text)}),m=g}else typeof e=="object"&&e&&e.text?m=e.text:m=e;r.insertText(m,d,u)}else m=l,r.replaceWith(d,u,m);t.updateSelection&&ta(r,r.steps.length-1,-1),t.applyInputRules&&r.setMeta("applyInputRules",{from:d,text:m}),t.applyPasteRules&&r.setMeta("applyPasteRules",{from:d,text:m})}return!0},Zu=()=>({state:n,dispatch:e})=>Si(n,e),Qu=()=>({state:n,dispatch:e})=>Ci(n,e),ef=()=>({state:n,dispatch:e})=>Pn(n,e),tf=()=>({state:n,dispatch:e})=>Bn(n,e),nf=()=>({state:n,dispatch:e,tr:t})=>{try{let r=Ue(n.doc,n.selection.$from.pos,-1);return r==null?!1:(t.join(r,2),e&&e(t),!0)}catch{return!1}},rf=()=>({state:n,dispatch:e,tr:t})=>{try{let r=Ue(n.doc,n.selection.$from.pos,1);return r==null?!1:(t.join(r,2),e&&e(t),!0)}catch{return!1}},of=()=>({state:n,dispatch:e})=>yi(n,e),sf=()=>({state:n,dispatch:e})=>ki(n,e);function Qi(){return typeof navigator<"u"?/Mac/.test(navigator.platform):!1}function lf(n){let e=n.split(/-(?!$)/),t=e[e.length-1];t==="Space"&&(t=" ");let r,i,o,s;for(let l=0;l({editor:e,view:t,tr:r,dispatch:i})=>{let o=lf(n).split(/-(?!$)/),s=o.find(c=>!["Alt","Ctrl","Meta","Shift"].includes(c)),l=new KeyboardEvent("keydown",{key:s==="Space"?" ":s,altKey:o.includes("Alt"),ctrlKey:o.includes("Ctrl"),metaKey:o.includes("Meta"),shiftKey:o.includes("Shift"),bubbles:!0,cancelable:!0}),a=e.captureTransaction(()=>{t.someProp("handleKeyDown",c=>c(t,l))});return a?.steps.forEach(c=>{let d=c.map(r.mapping);d&&i&&r.maybeStep(d)}),!0};function Dt(n,e,t={}){let{from:r,to:i,empty:o}=n.selection,s=e?F(e,n.schema):null,l=[];n.doc.nodesBetween(r,i,(u,f)=>{if(u.isText)return;let p=Math.max(r,f),h=Math.min(i,f+u.nodeSize);l.push({node:u,from:p,to:h})});let a=i-r,c=l.filter(u=>s?s.name===u.node.type.name:!0).filter(u=>tn(u.node.attrs,t,{strict:!1}));return o?!!c.length:c.reduce((u,f)=>u+f.to-f.from,0)>=a}var cf=(n,e={})=>({state:t,dispatch:r})=>{let i=F(n,t.schema);return Dt(t,i,e)?wi(t,r):!1},df=()=>({state:n,dispatch:e})=>$n(n,e),uf=n=>({state:e,dispatch:t})=>{let r=F(n,e.schema);return Ri(r)(e,t)},ff=()=>({state:n,dispatch:e})=>Fn(n,e);function ln(n,e){return e.nodes[n]?"node":e.marks[n]?"mark":null}function $i(n,e){let t=typeof e=="string"?[e]:e;return Object.keys(n).reduce((r,i)=>(t.includes(i)||(r[i]=n[i]),r),{})}var pf=(n,e)=>({tr:t,state:r,dispatch:i})=>{let o=null,s=null,l=ln(typeof n=="string"?n:n.name,r.schema);return l?(l==="node"&&(o=F(n,r.schema)),l==="mark"&&(s=De(n,r.schema)),i&&t.selection.ranges.forEach(a=>{r.doc.nodesBetween(a.$from.pos,a.$to.pos,(c,d)=>{o&&o===c.type&&t.setNodeMarkup(d,void 0,$i(c.attrs,e)),s&&c.marks.length&&c.marks.forEach(u=>{s===u.type&&t.addMark(d,d+c.nodeSize,s.create($i(u.attrs,e)))})})}),!0):!1},hf=()=>({tr:n,dispatch:e})=>(e&&n.scrollIntoView(),!0),mf=()=>({tr:n,dispatch:e})=>{if(e){let t=new q(n.doc);n.setSelection(t)}return!0},gf=()=>({state:n,dispatch:e})=>_n(n,e),yf=()=>({state:n,dispatch:e})=>zn(n,e),kf=()=>({state:n,dispatch:e})=>Oi(n,e),bf=()=>({state:n,dispatch:e})=>Wn(n,e),xf=()=>({state:n,dispatch:e})=>jn(n,e);function Zn(n,e,t={},r={}){return Nt(n,e,{slice:!1,parseOptions:t,errorOnInvalidContent:r.errorOnInvalidContent})}var Sf=(n,e=!1,t={},r={})=>({editor:i,tr:o,dispatch:s,commands:l})=>{var a,c;let{doc:d}=o;if(t.preserveWhitespace!=="full"){let u=Zn(n,i.schema,t,{errorOnInvalidContent:(a=r.errorOnInvalidContent)!==null&&a!==void 0?a:i.options.enableContentCheck});return s&&o.replaceWith(0,d.content.size,u).setMeta("preventUpdate",!e),!0}return s&&o.setMeta("preventUpdate",!e),l.insertContentAt({from:0,to:d.content.size},n,{parseOptions:t,errorOnInvalidContent:(c=r.errorOnInvalidContent)!==null&&c!==void 0?c:i.options.enableContentCheck})};function eo(n,e){let t=De(e,n.schema),{from:r,to:i,empty:o}=n.selection,s=[];o?(n.storedMarks&&s.push(...n.storedMarks),s.push(...n.selection.$head.marks())):n.doc.nodesBetween(r,i,a=>{s.push(...a.marks)});let l=s.find(a=>a.type.name===t.name);return l?{...l.attrs}:{}}function Cf(n,e){let t=new He(n);return e.forEach(r=>{r.steps.forEach(i=>{t.step(i)})}),t}function na(n){for(let e=0;e{e(r)&&t.push({node:r,pos:i})}),t}function Mf(n,e,t){let r=[];return n.nodesBetween(e.from,e.to,(i,o)=>{t(i)&&r.push({node:i,pos:o})}),r}function ra(n,e){for(let t=n.depth;t>0;t-=1){let r=n.node(t);if(e(r))return{pos:t>0?n.before(t):0,start:n.start(t),depth:t,node:r}}}function an(n){return e=>ra(e.$from,n)}function ir(n,e){let t=Xn.resolve(n);return Gi(t,e)}function Ef(n,e){let t=ir(e),r=Y.fromJSON(t,n);return on(r.content,t)}function Of(n,e){let t=ir(e),r=Et(n);return ce.fromSchema(t).parse(r).toJSON()}function to(n,e){let t={from:0,to:n.content.size};return Yi(n,t,e)}function Tf(n,e,t){let{blockSeparator:r=` +`,textSerializers:s={}}=t||{},l="";return n.nodesBetween(r,o,(a,c,d,f)=>{var u;a.isBlock&&c>r&&(l+=i);let p=s?.[a.type.name];if(p)return d&&(l+=p({node:a,pos:c,parent:d,index:f,range:e})),!1;a.isText&&(l+=(u=a?.text)===null||u===void 0?void 0:u.slice(Math.max(r,c)-c,o-c))}),l}function br(n){return Object.fromEntries(Object.entries(n.nodes).filter(([,e])=>e.spec.toText).map(([e,t])=>[e,t.spec.toText]))}var Ra=ge.create({name:"clipboardTextSerializer",addOptions(){return{blockSeparator:void 0}},addProseMirrorPlugins(){return[new B({key:new K("clipboardTextSerializer"),props:{clipboardTextSerializer:()=>{let{editor:n}=this,{state:e,schema:t}=n,{doc:r,selection:o}=e,{ranges:i}=o,s=Math.min(...i.map(d=>d.$from.pos)),l=Math.max(...i.map(d=>d.$to.pos)),a=br(t);return xi(r,{from:s,to:l},{...this.options.blockSeparator!==void 0?{blockSeparator:this.options.blockSeparator}:{},textSerializers:a})}}})]}}),Gu=()=>({editor:n,view:e})=>(requestAnimationFrame(()=>{var t;n.isDestroyed||(e.dom.blur(),(t=window?.getSelection())===null||t===void 0||t.removeAllRanges())}),!0),Yu=(n=!1)=>({commands:e})=>e.setContent("",n),Xu=()=>({state:n,tr:e,dispatch:t})=>{let{selection:r}=e,{ranges:o}=r;return t&&o.forEach(({$from:i,$to:s})=>{n.doc.nodesBetween(i.pos,s.pos,(l,a)=>{if(l.type.isText)return;let{doc:c,mapping:d}=e,f=c.resolve(d.map(a)),u=c.resolve(d.map(a+l.nodeSize)),p=f.blockRange(u);if(!p)return;let h=Se(p);if(l.type.isTextblock){let{defaultType:m}=f.parent.contentMatchAt(f.index());e.setNodeMarkup(p.start,m)}(h||h===0)&&e.lift(p,h)})}),!0},Zu=n=>e=>n(e),Qu=()=>({state:n,dispatch:e})=>nr(n,e),ep=(n,e)=>({editor:t,tr:r})=>{let{state:o}=t,i=o.doc.slice(n.from,n.to);r.deleteRange(n.from,n.to);let s=r.mapping.map(e);return r.insert(s,i.content),r.setSelection(new O(r.doc.resolve(Math.max(s-1,0)))),!0},tp=()=>({tr:n,dispatch:e})=>{let{selection:t}=n,r=t.$anchor.node();if(r.content.size>0)return!1;let o=n.selection.$anchor;for(let i=o.depth;i>0;i-=1)if(o.node(i).type===r.type){if(e){let l=o.before(i),a=o.after(i);n.delete(l,a).scrollIntoView()}return!0}return!1},np=n=>({tr:e,state:t,dispatch:r})=>{let o=V(n,t.schema),i=e.selection.$anchor;for(let s=i.depth;s>0;s-=1)if(i.node(s).type===o){if(r){let a=i.before(s),c=i.after(s);e.delete(a,c).scrollIntoView()}return!0}return!1},rp=n=>({tr:e,dispatch:t})=>{let{from:r,to:o}=n;return t&&e.delete(r,o),!0},op=()=>({state:n,dispatch:e})=>un(n,e),ip=()=>({commands:n})=>n.keyboardShortcut("Enter"),sp=()=>({state:n,dispatch:e})=>tr(n,e);function mn(n,e,t={strict:!0}){let r=Object.keys(e);return r.length?r.every(o=>t.strict?e[o]===n[o]:yr(e[o])?e[o].test(n[o]):e[o]===n[o]):!0}function Ia(n,e,t={}){return n.find(r=>r.type===e&&mn(Object.fromEntries(Object.keys(t).map(o=>[o,r.attrs[o]])),t))}function wa(n,e,t={}){return!!Ia(n,e,t)}function kr(n,e,t){var r;if(!n||!e)return;let o=n.parent.childAfter(n.parentOffset);if((!o.node||!o.node.marks.some(d=>d.type===e))&&(o=n.parent.childBefore(n.parentOffset)),!o.node||!o.node.marks.some(d=>d.type===e)||(t=t||((r=o.node.marks[0])===null||r===void 0?void 0:r.attrs),!Ia([...o.node.marks],e,t)))return;let s=o.index,l=n.start()+o.offset,a=s+1,c=l+o.node.nodeSize;for(;s>0&&wa([...n.parent.child(s-1).marks],e,t);)s-=1,l-=n.parent.child(s).nodeSize;for(;a({tr:t,state:r,dispatch:o})=>{let i=ze(n,r.schema),{doc:s,selection:l}=t,{$from:a,from:c,to:d}=l;if(o){let f=kr(a,i,e);if(f&&f.from<=c&&f.to>=d){let u=O.create(s,f.from,f.to);t.setSelection(u)}}return!0},ap=n=>e=>{let t=typeof n=="function"?n(e):n;for(let r=0;r({editor:t,view:r,tr:o,dispatch:i})=>{e={scrollIntoView:!0,...e};let s=()=>{(Ft()||di())&&r.dom.focus(),requestAnimationFrame(()=>{t.isDestroyed||(r.focus(),_a()&&!Ft()&&!di()&&r.dom.focus({preventScroll:!0}))})};if(r.hasFocus()&&n===null||n===!1)return!0;if(i&&n===null&&!Si(t.state.selection))return s(),!0;let l=wi(o.doc,n)||t.state.selection,a=t.state.selection.eq(l);return i&&(a||o.setSelection(l),a&&o.storedMarks&&o.setStoredMarks(o.storedMarks),s()),!0},dp=(n,e)=>t=>n.every((r,o)=>e(r,{...t,index:o})),fp=(n,e)=>({tr:t,commands:r})=>r.insertContentAt({from:t.selection.from,to:t.selection.to},n,e),Pa=n=>{let e=n.childNodes;for(let t=e.length-1;t>=0;t-=1){let r=e[t];r.nodeType===3&&r.nodeValue&&/^(\n\s\s|\n)$/.test(r.nodeValue)?n.removeChild(r):r.nodeType===1&&Pa(r)}return n};function Bt(n){let e=`${n}`,t=new window.DOMParser().parseFromString(e,"text/html").body;return Pa(t)}function Lt(n,e,t){if(n instanceof te||n instanceof b)return n;t={slice:!0,parseOptions:{},...t};let r=typeof n=="object"&&n!==null,o=typeof n=="string";if(r)try{if(Array.isArray(n)&&n.length>0)return b.fromArray(n.map(l=>e.nodeFromJSON(l)));let s=e.nodeFromJSON(n);return t.errorOnInvalidContent&&s.check(),s}catch(i){if(t.errorOnInvalidContent)throw new Error("[tiptap error]: Invalid JSON content",{cause:i});return console.warn("[tiptap warn]: Invalid content.","Passed value:",n,"Error:",i),Lt("",e,t)}if(o){if(t.errorOnInvalidContent){let s=!1,l="",a=new kt({topNode:e.spec.topNode,marks:e.spec.marks,nodes:e.spec.nodes.append({__tiptap__private__unknown__catch__all__node:{content:"inline*",group:"block",parseDOM:[{tag:"*",getAttrs:c=>(s=!0,l=typeof c=="string"?c:c.outerHTML,null)}]}})});if(t.slice?me.fromSchema(a).parseSlice(Bt(n),t.parseOptions):me.fromSchema(a).parse(Bt(n),t.parseOptions),t.errorOnInvalidContent&&s)throw new Error("[tiptap error]: Invalid HTML content",{cause:new Error(`Invalid element found: ${l}`)})}let i=me.fromSchema(e);return t.slice?i.parseSlice(Bt(n),t.parseOptions).content:i.parse(Bt(n),t.parseOptions)}return Lt("",e,t)}function Ba(n,e,t){let r=n.steps.length-1;if(r{s===0&&(s=d)}),n.setSelection(C.near(n.doc.resolve(s),t))}var up=n=>!("type"in n),pp=(n,e,t)=>({tr:r,dispatch:o,editor:i})=>{var s;if(o){t={parseOptions:i.options.parseOptions,updateSelection:!0,applyInputRules:!1,applyPasteRules:!1,...t};let l,a=g=>{i.emit("contentError",{editor:i,error:g,disableCollaboration:()=>{i.storage.collaboration&&(i.storage.collaboration.isDisabled=!0)}})},c={preserveWhitespace:"full",...t.parseOptions};if(!t.errorOnInvalidContent&&!i.options.enableContentCheck&&i.options.emitContentError)try{Lt(e,i.schema,{parseOptions:c,errorOnInvalidContent:!0})}catch(g){a(g)}try{l=Lt(e,i.schema,{parseOptions:c,errorOnInvalidContent:(s=t.errorOnInvalidContent)!==null&&s!==void 0?s:i.options.enableContentCheck})}catch(g){return a(g),!1}let{from:d,to:f}=typeof n=="number"?{from:n,to:n}:{from:n.from,to:n.to},u=!0,p=!0;if((up(l)?l:[l]).forEach(g=>{g.check(),u=u?g.isText&&g.marks.length===0:!1,p=p?g.isBlock:!1}),d===f&&p){let{parent:g}=r.doc.resolve(d);g.isTextblock&&!g.type.spec.code&&!g.childCount&&(d-=1,f+=1)}let m;if(u){if(Array.isArray(e))m=e.map(g=>g.text||"").join("");else if(e instanceof b){let g="";e.forEach(y=>{y.text&&(g+=y.text)}),m=g}else typeof e=="object"&&e&&e.text?m=e.text:m=e;r.insertText(m,d,f)}else m=l,r.replaceWith(d,f,m);t.updateSelection&&Ba(r,r.steps.length-1,-1),t.applyInputRules&&r.setMeta("applyInputRules",{from:d,text:m}),t.applyPasteRules&&r.setMeta("applyPasteRules",{from:d,text:m})}return!0},hp=()=>({state:n,dispatch:e})=>Ho(n,e),mp=()=>({state:n,dispatch:e})=>Jo(n,e),gp=()=>({state:n,dispatch:e})=>Yn(n,e),yp=()=>({state:n,dispatch:e})=>Zn(n,e),bp=()=>({state:n,dispatch:e,tr:t})=>{try{let r=it(n.doc,n.selection.$from.pos,-1);return r==null?!1:(t.join(r,2),e&&e(t),!0)}catch{return!1}},kp=()=>({state:n,dispatch:e,tr:t})=>{try{let r=it(n.doc,n.selection.$from.pos,1);return r==null?!1:(t.join(r,2),e&&e(t),!0)}catch{return!1}},xp=()=>({state:n,dispatch:e})=>Vo(n,e),Sp=()=>({state:n,dispatch:e})=>jo(n,e);function Ci(){return typeof navigator<"u"?/Mac/.test(navigator.platform):!1}function wp(n){let e=n.split(/-(?!$)/),t=e[e.length-1];t==="Space"&&(t=" ");let r,o,i,s;for(let l=0;l({editor:e,view:t,tr:r,dispatch:o})=>{let i=wp(n).split(/-(?!$)/),s=i.find(c=>!["Alt","Ctrl","Meta","Shift"].includes(c)),l=new KeyboardEvent("keydown",{key:s==="Space"?" ":s,altKey:i.includes("Alt"),ctrlKey:i.includes("Ctrl"),metaKey:i.includes("Meta"),shiftKey:i.includes("Shift"),bubbles:!0,cancelable:!0}),a=e.captureTransaction(()=>{t.someProp("handleKeyDown",c=>c(t,l))});return a?.steps.forEach(c=>{let d=c.map(r.mapping);d&&o&&r.maybeStep(d)}),!0};function $t(n,e,t={}){let{from:r,to:o,empty:i}=n.selection,s=e?V(e,n.schema):null,l=[];n.doc.nodesBetween(r,o,(f,u)=>{if(f.isText)return;let p=Math.max(r,u),h=Math.min(o,u+f.nodeSize);l.push({node:f,from:p,to:h})});let a=o-r,c=l.filter(f=>s?s.name===f.node.type.name:!0).filter(f=>mn(f.node.attrs,t,{strict:!1}));return i?!!c.length:c.reduce((f,u)=>f+u.to-u.from,0)>=a}var Mp=(n,e={})=>({state:t,dispatch:r})=>{let o=V(n,t.schema);return $t(t,o,e)?qo(t,r):!1},Ep=()=>({state:n,dispatch:e})=>rr(n,e),Op=n=>({state:e,dispatch:t})=>{let r=V(n,e.schema);return ni(r)(e,t)},Tp=()=>({state:n,dispatch:e})=>er(n,e);function xn(n,e){return e.nodes[n]?"node":e.marks[n]?"mark":null}function fi(n,e){let t=typeof e=="string"?[e]:e;return Object.keys(n).reduce((r,o)=>(t.includes(o)||(r[o]=n[o]),r),{})}var Np=(n,e)=>({tr:t,state:r,dispatch:o})=>{let i=null,s=null,l=xn(typeof n=="string"?n:n.name,r.schema);return l?(l==="node"&&(i=V(n,r.schema)),l==="mark"&&(s=ze(n,r.schema)),o&&t.selection.ranges.forEach(a=>{r.doc.nodesBetween(a.$from.pos,a.$to.pos,(c,d)=>{i&&i===c.type&&t.setNodeMarkup(d,void 0,fi(c.attrs,e)),s&&c.marks.length&&c.marks.forEach(f=>{s===f.type&&t.addMark(d,d+c.nodeSize,s.create(fi(f.attrs,e)))})})}),!0):!1},Ap=()=>({tr:n,dispatch:e})=>(e&&n.scrollIntoView(),!0),vp=()=>({tr:n,dispatch:e})=>{if(e){let t=new Z(n.doc);n.setSelection(t)}return!0},Dp=()=>({state:n,dispatch:e})=>Xn(n,e),Rp=()=>({state:n,dispatch:e})=>Qn(n,e),Ip=()=>({state:n,dispatch:e})=>Yo(n,e),_p=()=>({state:n,dispatch:e})=>ir(n,e),Pp=()=>({state:n,dispatch:e})=>or(n,e);function hr(n,e,t={},r={}){return Lt(n,e,{slice:!1,parseOptions:t,errorOnInvalidContent:r.errorOnInvalidContent})}var Bp=(n,e=!1,t={},r={})=>({editor:o,tr:i,dispatch:s,commands:l})=>{var a,c;let{doc:d}=i;if(t.preserveWhitespace!=="full"){let f=hr(n,o.schema,t,{errorOnInvalidContent:(a=r.errorOnInvalidContent)!==null&&a!==void 0?a:o.options.enableContentCheck});return s&&i.replaceWith(0,d.content.size,f).setMeta("preventUpdate",!e),!0}return s&&i.setMeta("preventUpdate",!e),l.insertContentAt({from:0,to:d.content.size},n,{parseOptions:t,errorOnInvalidContent:(c=r.errorOnInvalidContent)!==null&&c!==void 0?c:o.options.enableContentCheck})};function Mi(n,e){let t=ze(e,n.schema),{from:r,to:o,empty:i}=n.selection,s=[];i?(n.storedMarks&&s.push(...n.storedMarks),s.push(...n.selection.$head.marks())):n.doc.nodesBetween(r,o,a=>{s.push(...a.marks)});let l=s.find(a=>a.type.name===t.name);return l?{...l.attrs}:{}}function zp(n,e){let t=new ve(n);return e.forEach(r=>{r.steps.forEach(o=>{t.step(o)})}),t}function za(n){for(let e=0;e{e(r)&&t.push({node:r,pos:o})}),t}function Lp(n,e,t){let r=[];return n.nodesBetween(e.from,e.to,(o,i)=>{t(o)&&r.push({node:o,pos:i})}),r}function Fa(n,e){for(let t=n.depth;t>0;t-=1){let r=n.node(t);if(e(r))return{pos:t>0?n.before(t):0,start:n.start(t),depth:t,node:r}}}function Sn(n){return e=>Fa(e.$from,n)}function xr(n,e){let t=pr.resolve(n);return ki(t,e)}function $p(n,e){let t=xr(e),r=te.fromJSON(t,n);return bn(r.content,t)}function Vp(n,e){let t=xr(e),r=Bt(n);return me.fromSchema(t).parse(r).toJSON()}function Ei(n,e){let t={from:0,to:n.content.size};return xi(n,t,e)}function jp(n,e,t){let{blockSeparator:r=` -`,textSerializers:i={}}=t||{},o=ir(e),s=Y.fromJSON(o,n);return to(s,{blockSeparator:r,textSerializers:{...nr(o),...i}})}function ia(n,e){let t=F(e,n.schema),{from:r,to:i}=n.selection,o=[];n.doc.nodesBetween(r,i,l=>{o.push(l)});let s=o.reverse().find(l=>l.type.name===t.name);return s?{...s.attrs}:{}}function oa(n,e){let t=ln(typeof e=="string"?e:e.name,n.schema);return t==="node"?ia(n,e):t==="mark"?eo(n,e):{}}function sa(n,e=JSON.stringify){let t={};return n.filter(r=>{let i=e(r);return Object.prototype.hasOwnProperty.call(t,i)?!1:t[i]=!0})}function Nf(n){let e=sa(n);return e.length===1?e:e.filter((t,r)=>!e.filter((o,s)=>s!==r).some(o=>t.oldRange.from>=o.oldRange.from&&t.oldRange.to<=o.oldRange.to&&t.newRange.from>=o.newRange.from&&t.newRange.to<=o.newRange.to))}function Df(n){let{mapping:e,steps:t}=n,r=[];return e.maps.forEach((i,o)=>{let s=[];if(i.ranges.length)i.forEach((l,a)=>{s.push({from:l,to:a})});else{let{from:l,to:a}=t[o];if(l===void 0||a===void 0)return;s.push({from:l,to:a})}s.forEach(({from:l,to:a})=>{let c=e.slice(o).map(l,-1),d=e.slice(o).map(a),u=e.invert().map(c,-1),f=e.invert().map(d);r.push({oldRange:{from:u,to:f},newRange:{from:c,to:d}})})}),Nf(r)}function la(n,e=0){let r=n.type===n.type.schema.topNodeType?0:1,i=e,o=i+n.nodeSize,s=n.marks.map(c=>{let d={type:c.type.name};return Object.keys(c.attrs).length&&(d.attrs={...c.attrs}),d}),l={...n.attrs},a={type:n.type.name,from:i,to:o};return Object.keys(l).length&&(a.attrs=l),s.length&&(a.marks=s),n.content.childCount&&(a.content=[],n.forEach((c,d)=>{var u;(u=a.content)===null||u===void 0||u.push(la(c,e+d+r))})),n.text&&(a.text=n.text),a}function no(n,e,t){let r=[];return n===e?t.resolve(n).marks().forEach(i=>{let o=t.resolve(n),s=rr(o,i.type);s&&r.push({mark:i,...s})}):t.nodesBetween(n,e,(i,o)=>{!i||i?.nodeSize===void 0||r.push(...i.marks.map(s=>({from:o,to:o+i.nodeSize,mark:s})))}),r}var Af=(n,e,t,r=20)=>{let i=n.doc.resolve(t),o=r,s=null;for(;o>0&&s===null;){let l=i.node(o);l?.type.name===e?s=l:o-=1}return[s,o]};function en(n,e,t){return Object.fromEntries(Object.entries(t).filter(([r])=>{let i=n.find(o=>o.type===e&&o.name===r);return i?i.attribute.keepOnSplit:!1}))}function Qn(n,e,t={}){let{empty:r,ranges:i}=n.selection,o=e?De(e,n.schema):null;if(r)return!!(n.storedMarks||n.selection.$from.marks()).filter(u=>o?o.name===u.type.name:!0).find(u=>tn(u.attrs,t,{strict:!1}));let s=0,l=[];if(i.forEach(({$from:u,$to:f})=>{let p=u.pos,h=f.pos;n.doc.nodesBetween(p,h,(m,g)=>{if(!m.isText&&!m.marks.length)return;let y=Math.max(p,g),w=Math.min(h,g+m.nodeSize),M=w-y;s+=M,l.push(...m.marks.map(A=>({mark:A,from:y,to:w})))})}),s===0)return!1;let a=l.filter(u=>o?o.name===u.mark.type.name:!0).filter(u=>tn(u.mark.attrs,t,{strict:!1})).reduce((u,f)=>u+f.to-f.from,0),c=l.filter(u=>o?u.mark.type!==o&&u.mark.type.excludes(o):!0).reduce((u,f)=>u+f.to-f.from,0);return(a>0?a+c:a)>=s}function aa(n,e,t={}){if(!e)return Dt(n,null,t)||Qn(n,null,t);let r=ln(e,n.schema);return r==="node"?Dt(n,e,t):r==="mark"?Qn(n,e,t):!1}var vf=(n,e)=>{let{$from:t,$to:r,$anchor:i}=n.selection;if(e){let o=an(l=>l.type.name===e)(n.selection);if(!o)return!1;let s=n.doc.resolve(o.pos+1);return i.pos+1===s.end()}return!(r.parentOffset{let{$from:e,$to:t}=n.selection;return!(e.parentOffset>0||e.pos!==t.pos)};function ji(n,e){let{nodeExtensions:t}=rn(e),r=t.find(s=>s.name===n);if(!r)return!1;let i={name:r.name,options:r.options,storage:r.storage},o=N(x(r,"group",i));return typeof o!="string"?!1:o.split(" ").includes("list")}function or(n,{checkChildren:e=!0,ignoreWhitespace:t=!1}={}){var r;if(t){if(n.type.name==="hardBreak")return!0;if(n.isText)return/^\s*$/m.test((r=n.text)!==null&&r!==void 0?r:"")}if(n.isText)return!n.text;if(n.isAtom||n.isLeaf)return!1;if(n.content.childCount===0)return!0;if(e){let i=!0;return n.content.forEach(o=>{i!==!1&&(or(o,{ignoreWhitespace:t,checkChildren:e})||(i=!1))}),i}return!1}function If(n){return n instanceof S}function Pf(n,e,t){let i=n.state.doc.content.size,o=be(e,0,i),s=be(t,0,i),l=n.coordsAtPos(o),a=n.coordsAtPos(s,-1),c=Math.min(l.top,a.top),d=Math.max(l.bottom,a.bottom),u=Math.min(l.left,a.left),f=Math.max(l.right,a.right),p=f-u,h=d-c,y={top:c,bottom:d,left:u,right:f,width:p,height:h,x:u,y:c};return{...y,toJSON:()=>y}}function ca({json:n,validMarks:e,validNodes:t,options:r,rewrittenContent:i=[]}){return n.marks&&Array.isArray(n.marks)&&(n.marks=n.marks.filter(o=>{let s=typeof o=="string"?o:o.type;return e.has(s)?!0:(i.push({original:JSON.parse(JSON.stringify(o)),unsupported:s}),!1)})),n.content&&Array.isArray(n.content)&&(n.content=n.content.map(o=>ca({json:o,validMarks:e,validNodes:t,options:r,rewrittenContent:i}).json).filter(o=>o!=null)),n.type&&!t.has(n.type)?(i.push({original:JSON.parse(JSON.stringify(n)),unsupported:n.type}),n.content&&Array.isArray(n.content)&&r?.fallbackToParagraph!==!1?(n.type="paragraph",{json:n,rewrittenContent:i}):{json:null,rewrittenContent:i}):{json:n,rewrittenContent:i}}function _f(n,e,t){return ca({json:n,validNodes:new Set(Object.keys(e.nodes)),validMarks:new Set(Object.keys(e.marks)),options:t})}function Bf(n,e,t){var r;let{selection:i}=e,o=null;if(Xi(i)&&(o=i.$cursor),o){let l=(r=n.storedMarks)!==null&&r!==void 0?r:o.marks();return!!t.isInSet(l)||!l.some(a=>a.type.excludes(t))}let{ranges:s}=i;return s.some(({$from:l,$to:a})=>{let c=l.depth===0?n.doc.inlineContent&&n.doc.type.allowsMarkType(t):!1;return n.doc.nodesBetween(l.pos,a.pos,(d,u,f)=>{if(c)return!1;if(d.isInline){let p=!f||f.type.allowsMarkType(t),h=!!t.isInSet(d.marks)||!d.marks.some(m=>m.type.excludes(t));c=p&&h}return!c}),c})}var zf=(n,e={})=>({tr:t,state:r,dispatch:i})=>{let{selection:o}=t,{empty:s,ranges:l}=o,a=De(n,r.schema);if(i)if(s){let c=eo(r,a);t.addStoredMark(a.create({...c,...e}))}else l.forEach(c=>{let d=c.$from.pos,u=c.$to.pos;r.doc.nodesBetween(d,u,(f,p)=>{let h=Math.max(p,d),m=Math.min(p+f.nodeSize,u);f.marks.find(y=>y.type===a)?f.marks.forEach(y=>{a===y.type&&t.addMark(h,m,a.create({...y.attrs,...e}))}):t.addMark(h,m,a.create(e))})});return Bf(r,t,a)},Ff=(n,e)=>({tr:t})=>(t.setMeta(n,e),!0),Lf=(n,e={})=>({state:t,dispatch:r,chain:i})=>{let o=F(n,t.schema),s;return t.selection.$anchor.sameParent(t.selection.$head)&&(s=t.selection.$anchor.parent.attrs),o.isTextblock?i().command(({commands:l})=>Kn(o,{...s,...e})(t)?!0:l.clearNodes()).command(({state:l})=>Kn(o,{...s,...e})(l,r)).run():(console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.'),!1)},Vf=n=>({tr:e,dispatch:t})=>{if(t){let{doc:r}=e,i=be(n,0,r.content.size),o=S.create(r,i);e.setSelection(o)}return!0},$f=n=>({tr:e,dispatch:t})=>{if(t){let{doc:r}=e,{from:i,to:o}=typeof n=="number"?{from:n,to:n}:n,s=T.atStart(r).from,l=T.atEnd(r).to,a=be(i,s,l),c=be(o,s,l),d=T.create(r,a,c);e.setSelection(d)}return!0},jf=n=>({state:e,dispatch:t})=>{let r=F(n,e.schema);return Ii(r)(e,t)};function jl(n,e){let t=n.storedMarks||n.selection.$to.parentOffset&&n.selection.$from.marks();if(t){let r=t.filter(i=>e?.includes(i.type.name));n.tr.ensureMarks(r)}}var Wf=({keepMarks:n=!0}={})=>({tr:e,state:t,dispatch:r,editor:i})=>{let{selection:o,doc:s}=e,{$from:l,$to:a}=o,c=i.extensionManager.attributes,d=en(c,l.node().type.name,l.node().attrs);if(o instanceof S&&o.node.isBlock)return!l.parentOffset||!ee(s,l.pos)?!1:(r&&(n&&jl(t,i.extensionManager.splittableMarks),e.split(l.pos).scrollIntoView()),!0);if(!l.parent.isBlock)return!1;let u=a.parentOffset===a.parent.content.size,f=l.depth===0?void 0:na(l.node(-1).contentMatchAt(l.indexAfter(-1))),p=u&&f?[{type:f,attrs:d}]:void 0,h=ee(e.doc,e.mapping.map(l.pos),1,p);if(!p&&!h&&ee(e.doc,e.mapping.map(l.pos),1,f?[{type:f}]:void 0)&&(h=!0,p=f?[{type:f,attrs:d}]:void 0),r){if(h&&(o instanceof T&&e.deleteSelection(),e.split(e.mapping.map(l.pos),1,p),f&&!u&&!l.parentOffset&&l.parent.type!==f)){let m=e.mapping.map(l.before()),g=e.doc.resolve(m);l.node(-1).canReplaceWith(g.index(),g.index()+1,f)&&e.setNodeMarkup(e.mapping.map(l.before()),f)}n&&jl(t,i.extensionManager.splittableMarks),e.scrollIntoView()}return h},Kf=(n,e={})=>({tr:t,state:r,dispatch:i,editor:o})=>{var s;let l=F(n,r.schema),{$from:a,$to:c}=r.selection,d=r.selection.node;if(d&&d.isBlock||a.depth<2||!a.sameParent(c))return!1;let u=a.node(-1);if(u.type!==l)return!1;let f=o.extensionManager.attributes;if(a.parent.content.size===0&&a.node(-1).childCount===a.indexAfter(-1)){if(a.depth===2||a.node(-3).type!==l||a.index(-2)!==a.node(-2).childCount-1)return!1;if(i){let y=k.empty,w=a.index(-1)?1:a.index(-2)?2:3;for(let R=a.depth-w;R>=a.depth-3;R-=1)y=k.from(a.node(R).copy(y));let M=a.indexAfter(-1){if(O>-1)return!1;R.isTextblock&&R.content.size===0&&(O=J+1)}),O>-1&&t.setSelection(T.near(t.doc.resolve(O))),t.scrollIntoView()}return!0}let p=c.pos===a.end()?u.contentMatchAt(0).defaultType:null,h={...en(f,u.type.name,u.attrs),...e},m={...en(f,a.node().type.name,a.node().attrs),...e};t.delete(a.pos,c.pos);let g=p?[{type:l,attrs:h},{type:p,attrs:m}]:[{type:l,attrs:h}];if(!ee(t.doc,a.pos,2))return!1;if(i){let{selection:y,storedMarks:w}=r,{splittableMarks:M}=o.extensionManager,A=w||y.$to.parentOffset&&y.$from.marks();if(t.split(a.pos,2,g).scrollIntoView(),!A||!i)return!0;let v=A.filter(B=>M.includes(B.type.name));t.ensureMarks(v)}return!0},_i=(n,e)=>{let t=an(s=>s.type===e)(n.selection);if(!t)return!0;let r=n.doc.resolve(Math.max(0,t.pos-1)).before(t.depth);if(r===void 0)return!0;let i=n.doc.nodeAt(r);return t.node.type===i?.type&&re(n.doc,t.pos)&&n.join(t.pos),!0},Bi=(n,e)=>{let t=an(s=>s.type===e)(n.selection);if(!t)return!0;let r=n.doc.resolve(t.start).after(t.depth);if(r===void 0)return!0;let i=n.doc.nodeAt(r);return t.node.type===i?.type&&re(n.doc,r)&&n.join(r),!0},Jf=(n,e,t,r={})=>({editor:i,tr:o,state:s,dispatch:l,chain:a,commands:c,can:d})=>{let{extensions:u,splittableMarks:f}=i.extensionManager,p=F(n,s.schema),h=F(e,s.schema),{selection:m,storedMarks:g}=s,{$from:y,$to:w}=m,M=y.blockRange(w),A=g||m.$to.parentOffset&&m.$from.marks();if(!M)return!1;let v=an(B=>ji(B.type.name,u))(m);if(M.depth>=1&&v&&M.depth-v.depth<=1){if(v.node.type===p)return c.liftListItem(h);if(ji(v.node.type.name,u)&&p.validContent(v.node.content)&&l)return a().command(()=>(o.setNodeMarkup(v.pos,p),!0)).command(()=>_i(o,p)).command(()=>Bi(o,p)).run()}return!t||!A||!l?a().command(()=>d().wrapInList(p,r)?!0:c.clearNodes()).wrapInList(p,r).command(()=>_i(o,p)).command(()=>Bi(o,p)).run():a().command(()=>{let B=d().wrapInList(p,r),O=A.filter(R=>f.includes(R.type.name));return o.ensureMarks(O),B?!0:c.clearNodes()}).wrapInList(p,r).command(()=>_i(o,p)).command(()=>Bi(o,p)).run()},Hf=(n,e={},t={})=>({state:r,commands:i})=>{let{extendEmptyMarkRange:o=!1}=t,s=De(n,r.schema);return Qn(r,s,e)?i.unsetMark(s,{extendEmptyMarkRange:o}):i.setMark(s,e)},qf=(n,e,t={})=>({state:r,commands:i})=>{let o=F(n,r.schema),s=F(e,r.schema),l=Dt(r,o,t),a;return r.selection.$anchor.sameParent(r.selection.$head)&&(a=r.selection.$anchor.parent.attrs),l?i.setNode(s,a):i.setNode(o,{...a,...t})},Uf=(n,e={})=>({state:t,commands:r})=>{let i=F(n,t.schema);return Dt(t,i,e)?r.lift(i):r.wrapIn(i,e)},Gf=()=>({state:n,dispatch:e})=>{let t=n.plugins;for(let r=0;r=0;a-=1)s.step(l.steps[a].invert(l.docs[a]));if(o.text){let a=s.doc.resolve(o.from).marks();s.replaceWith(o.from,o.to,n.schema.text(o.text,a))}else s.delete(o.from,o.to)}return!0}}return!1},Yf=()=>({tr:n,dispatch:e})=>{let{selection:t}=n,{empty:r,ranges:i}=t;return r||e&&i.forEach(o=>{n.removeMark(o.$from.pos,o.$to.pos)}),!0},Xf=(n,e={})=>({tr:t,state:r,dispatch:i})=>{var o;let{extendEmptyMarkRange:s=!1}=e,{selection:l}=t,a=De(n,r.schema),{$from:c,empty:d,ranges:u}=l;if(!i)return!0;if(d&&s){let{from:f,to:p}=l,h=(o=c.marks().find(g=>g.type===a))===null||o===void 0?void 0:o.attrs,m=rr(c,a,h);m&&(f=m.from,p=m.to),t.removeMark(f,p,a)}else u.forEach(f=>{t.removeMark(f.$from.pos,f.$to.pos,a)});return t.removeStoredMark(a),!0},Zf=(n,e={})=>({tr:t,state:r,dispatch:i})=>{let o=null,s=null,l=ln(typeof n=="string"?n:n.name,r.schema);return l?(l==="node"&&(o=F(n,r.schema)),l==="mark"&&(s=De(n,r.schema)),i&&t.selection.ranges.forEach(a=>{let c=a.$from.pos,d=a.$to.pos,u,f,p,h;t.selection.empty?r.doc.nodesBetween(c,d,(m,g)=>{o&&o===m.type&&(p=Math.max(g,c),h=Math.min(g+m.nodeSize,d),u=g,f=m)}):r.doc.nodesBetween(c,d,(m,g)=>{g=c&&g<=d&&(o&&o===m.type&&t.setNodeMarkup(g,void 0,{...m.attrs,...e}),s&&m.marks.length&&m.marks.forEach(y=>{if(s===y.type){let w=Math.max(g,c),M=Math.min(g+m.nodeSize,d);t.addMark(w,M,s.create({...y.attrs,...e}))}}))}),f&&(u!==void 0&&t.setNodeMarkup(u,void 0,{...f.attrs,...e}),s&&f.marks.length&&f.marks.forEach(m=>{s===m.type&&t.addMark(p,h,s.create({...m.attrs,...e}))}))}),!0):!1},Qf=(n,e={})=>({state:t,dispatch:r})=>{let i=F(n,t.schema);return Ti(i,e)(t,r)},ep=(n,e={})=>({state:t,dispatch:r})=>{let i=F(n,t.schema);return vi(i,e)(t,r)},tp=Object.freeze({__proto__:null,blur:Iu,clearContent:Pu,clearNodes:_u,command:Bu,createParagraphNear:zu,cut:Fu,deleteCurrentNode:Lu,deleteNode:Vu,deleteRange:$u,deleteSelection:ju,enter:Wu,exitCode:Ku,extendMarkRange:Ju,first:Hu,focus:qu,forEach:Uu,insertContent:Gu,insertContentAt:Xu,joinBackward:ef,joinDown:Qu,joinForward:tf,joinItemBackward:nf,joinItemForward:rf,joinTextblockBackward:of,joinTextblockForward:sf,joinUp:Zu,keyboardShortcut:af,lift:cf,liftEmptyBlock:df,liftListItem:uf,newlineInCode:ff,resetAttributes:pf,scrollIntoView:hf,selectAll:mf,selectNodeBackward:gf,selectNodeForward:yf,selectParentNode:kf,selectTextblockEnd:bf,selectTextblockStart:xf,setContent:Sf,setMark:zf,setMeta:Ff,setNode:Lf,setNodeSelection:Vf,setTextSelection:$f,sinkListItem:jf,splitBlock:Wf,splitListItem:Kf,toggleList:Jf,toggleMark:Hf,toggleNode:qf,toggleWrap:Uf,undoInputRule:Gf,unsetAllMarks:Yf,unsetMark:Xf,updateAttributes:Zf,wrapIn:Qf,wrapInList:ep}),da=ue.create({name:"commands",addCommands(){return{...tp}}}),ua=ue.create({name:"drop",addProseMirrorPlugins(){return[new P({key:new te("tiptapDrop"),props:{handleDrop:(n,e,t,r)=>{this.editor.emit("drop",{editor:this.editor,event:e,slice:t,moved:r})}}})]}}),fa=ue.create({name:"editable",addProseMirrorPlugins(){return[new P({key:new te("editable"),props:{editable:()=>this.editor.options.editable}})]}}),pa=new te("focusEvents"),ha=ue.create({name:"focusEvents",addProseMirrorPlugins(){let{editor:n}=this;return[new P({key:pa,props:{handleDOMEvents:{focus:(e,t)=>{n.isFocused=!0;let r=n.state.tr.setMeta("focus",{event:t}).setMeta("addToHistory",!1);return e.dispatch(r),!1},blur:(e,t)=>{n.isFocused=!1;let r=n.state.tr.setMeta("blur",{event:t}).setMeta("addToHistory",!1);return e.dispatch(r),!1}}}})]}}),ma=ue.create({name:"keymap",addKeyboardShortcuts(){let n=()=>this.editor.commands.first(({commands:s})=>[()=>s.undoInputRule(),()=>s.command(({tr:l})=>{let{selection:a,doc:c}=l,{empty:d,$anchor:u}=a,{pos:f,parent:p}=u,h=u.parent.isTextblock&&f>0?l.doc.resolve(f-1):u,m=h.parent.type.spec.isolating,g=u.pos-u.parentOffset,y=m&&h.parent.childCount===1?g===u.pos:E.atStart(c).from===f;return!d||!p.type.isTextblock||p.textContent.length||!y||y&&u.parent.type.name==="paragraph"?!1:s.clearNodes()}),()=>s.deleteSelection(),()=>s.joinBackward(),()=>s.selectNodeBackward()]),e=()=>this.editor.commands.first(({commands:s})=>[()=>s.deleteSelection(),()=>s.deleteCurrentNode(),()=>s.joinForward(),()=>s.selectNodeForward()]),r={Enter:()=>this.editor.commands.first(({commands:s})=>[()=>s.newlineInCode(),()=>s.createParagraphNear(),()=>s.liftEmptyBlock(),()=>s.splitBlock()]),"Mod-Enter":()=>this.editor.commands.exitCode(),Backspace:n,"Mod-Backspace":n,"Shift-Backspace":n,Delete:e,"Mod-Delete":e,"Mod-a":()=>this.editor.commands.selectAll()},i={...r},o={...r,"Ctrl-h":n,"Alt-Backspace":n,"Ctrl-d":e,"Ctrl-Alt-Backspace":e,"Alt-Delete":e,"Alt-d":e,"Ctrl-a":()=>this.editor.commands.selectTextblockStart(),"Ctrl-e":()=>this.editor.commands.selectTextblockEnd()};return Tt()||Qi()?o:i},addProseMirrorPlugins(){return[new P({key:new te("clearDocument"),appendTransaction:(n,e,t)=>{if(n.some(m=>m.getMeta("composition")))return;let r=n.some(m=>m.docChanged)&&!e.doc.eq(t.doc),i=n.some(m=>m.getMeta("preventClearDocument"));if(!r||i)return;let{empty:o,from:s,to:l}=e.selection,a=E.atStart(e.doc).from,c=E.atEnd(e.doc).to;if(o||!(s===a&&l===c)||!or(t.doc))return;let f=t.tr,p=nn({state:t,transaction:f}),{commands:h}=new ot({editor:this.editor,state:p});if(h.clearNodes(),!!f.steps.length)return f}})]}}),ga=ue.create({name:"paste",addProseMirrorPlugins(){return[new P({key:new te("tiptapPaste"),props:{handlePaste:(n,e,t)=>{this.editor.emit("paste",{editor:this.editor,event:e,slice:t})}}})]}}),ya=ue.create({name:"tabindex",addProseMirrorPlugins(){return[new P({key:new te("tabindex"),props:{attributes:()=>this.editor.isEditable?{tabindex:"0"}:{}}})]}}),np=Object.freeze({__proto__:null,ClipboardTextSerializer:Xl,Commands:da,Drop:ua,Editable:fa,FocusEvents:ha,Keymap:ma,Paste:ga,Tabindex:ya,focusEventsPluginKey:pa}),er=class n{get name(){return this.node.type.name}constructor(e,t,r=!1,i=null){this.currentNode=null,this.actualDepth=null,this.isBlock=r,this.resolvedPos=e,this.editor=t,this.currentNode=i}get node(){return this.currentNode||this.resolvedPos.node()}get element(){return this.editor.view.domAtPos(this.pos).node}get depth(){var e;return(e=this.actualDepth)!==null&&e!==void 0?e:this.resolvedPos.depth}get pos(){return this.resolvedPos.pos}get content(){return this.node.content}set content(e){let t=this.from,r=this.to;if(this.isBlock){if(this.content.size===0){console.error(`You can\u2019t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);return}t=this.from+1,r=this.to-1}this.editor.commands.insertContentAt({from:t,to:r},e)}get attributes(){return this.node.attrs}get textContent(){return this.node.textContent}get size(){return this.node.nodeSize}get from(){return this.isBlock?this.pos:this.resolvedPos.start(this.resolvedPos.depth)}get range(){return{from:this.from,to:this.to}}get to(){return this.isBlock?this.pos+this.size:this.resolvedPos.end(this.resolvedPos.depth)+(this.node.isText?0:1)}get parent(){if(this.depth===0)return null;let e=this.resolvedPos.start(this.resolvedPos.depth-1),t=this.resolvedPos.doc.resolve(e);return new n(t,this.editor)}get before(){let e=this.resolvedPos.doc.resolve(this.from-(this.isBlock?1:2));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.from-3)),new n(e,this.editor)}get after(){let e=this.resolvedPos.doc.resolve(this.to+(this.isBlock?2:1));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.to+3)),new n(e,this.editor)}get children(){let e=[];return this.node.content.forEach((t,r)=>{let i=t.isBlock&&!t.isTextblock,o=t.isAtom&&!t.isText,s=this.pos+r+(o?0:1);if(s<0||s>this.resolvedPos.doc.nodeSize-2)return;let l=this.resolvedPos.doc.resolve(s);if(!i&&l.depth<=this.depth)return;let a=new n(l,this.editor,i,i?t:null);i&&(a.actualDepth=this.depth+1),e.push(new n(l,this.editor,i,i?t:null))}),e}get firstChild(){return this.children[0]||null}get lastChild(){let e=this.children;return e[e.length-1]||null}closest(e,t={}){let r=null,i=this.parent;for(;i&&!r;){if(i.node.type.name===e)if(Object.keys(t).length>0){let o=i.node.attrs,s=Object.keys(t);for(let l=0;l{r&&i.length>0||(s.node.type.name===e&&o.every(a=>t[a]===s.node.attrs[a])&&i.push(s),!(r&&i.length>0)&&(i=i.concat(s.querySelectorAll(e,t,r))))}),i}setAttribute(e){let{tr:t}=this.editor.state;t.setNodeMarkup(this.from,void 0,{...this.node.attrs,...e}),this.editor.view.dispatch(t)}},rp=`.ProseMirror { +`,textSerializers:o={}}=t||{},i=xr(e),s=te.fromJSON(i,n);return Ei(s,{blockSeparator:r,textSerializers:{...br(i),...o}})}function La(n,e){let t=V(e,n.schema),{from:r,to:o}=n.selection,i=[];n.doc.nodesBetween(r,o,l=>{i.push(l)});let s=i.reverse().find(l=>l.type.name===t.name);return s?{...s.attrs}:{}}function $a(n,e){let t=xn(typeof e=="string"?e:e.name,n.schema);return t==="node"?La(n,e):t==="mark"?Mi(n,e):{}}function Va(n,e=JSON.stringify){let t={};return n.filter(r=>{let o=e(r);return Object.prototype.hasOwnProperty.call(t,o)?!1:t[o]=!0})}function Wp(n){let e=Va(n);return e.length===1?e:e.filter((t,r)=>!e.filter((i,s)=>s!==r).some(i=>t.oldRange.from>=i.oldRange.from&&t.oldRange.to<=i.oldRange.to&&t.newRange.from>=i.newRange.from&&t.newRange.to<=i.newRange.to))}function Kp(n){let{mapping:e,steps:t}=n,r=[];return e.maps.forEach((o,i)=>{let s=[];if(o.ranges.length)o.forEach((l,a)=>{s.push({from:l,to:a})});else{let{from:l,to:a}=t[i];if(l===void 0||a===void 0)return;s.push({from:l,to:a})}s.forEach(({from:l,to:a})=>{let c=e.slice(i).map(l,-1),d=e.slice(i).map(a),f=e.invert().map(c,-1),u=e.invert().map(d);r.push({oldRange:{from:f,to:u},newRange:{from:c,to:d}})})}),Wp(r)}function ja(n,e=0){let r=n.type===n.type.schema.topNodeType?0:1,o=e,i=o+n.nodeSize,s=n.marks.map(c=>{let d={type:c.type.name};return Object.keys(c.attrs).length&&(d.attrs={...c.attrs}),d}),l={...n.attrs},a={type:n.type.name,from:o,to:i};return Object.keys(l).length&&(a.attrs=l),s.length&&(a.marks=s),n.content.childCount&&(a.content=[],n.forEach((c,d)=>{var f;(f=a.content)===null||f===void 0||f.push(ja(c,e+d+r))})),n.text&&(a.text=n.text),a}function Oi(n,e,t){let r=[];return n===e?t.resolve(n).marks().forEach(o=>{let i=t.resolve(n),s=kr(i,o.type);s&&r.push({mark:o,...s})}):t.nodesBetween(n,e,(o,i)=>{!o||o?.nodeSize===void 0||r.push(...o.marks.map(s=>({from:i,to:i+o.nodeSize,mark:s})))}),r}var Hp=(n,e,t,r=20)=>{let o=n.doc.resolve(t),i=r,s=null;for(;i>0&&s===null;){let l=o.node(i);l?.type.name===e?s=l:i-=1}return[s,i]};function hn(n,e,t){return Object.fromEntries(Object.entries(t).filter(([r])=>{let o=n.find(i=>i.type===e&&i.name===r);return o?o.attribute.keepOnSplit:!1}))}function mr(n,e,t={}){let{empty:r,ranges:o}=n.selection,i=e?ze(e,n.schema):null;if(r)return!!(n.storedMarks||n.selection.$from.marks()).filter(f=>i?i.name===f.type.name:!0).find(f=>mn(f.attrs,t,{strict:!1}));let s=0,l=[];if(o.forEach(({$from:f,$to:u})=>{let p=f.pos,h=u.pos;n.doc.nodesBetween(p,h,(m,g)=>{if(!m.isText&&!m.marks.length)return;let y=Math.max(p,g),S=Math.min(h,g+m.nodeSize),M=S-y;s+=M,l.push(...m.marks.map(v=>({mark:v,from:y,to:S})))})}),s===0)return!1;let a=l.filter(f=>i?i.name===f.mark.type.name:!0).filter(f=>mn(f.mark.attrs,t,{strict:!1})).reduce((f,u)=>f+u.to-u.from,0),c=l.filter(f=>i?f.mark.type!==i&&f.mark.type.excludes(i):!0).reduce((f,u)=>f+u.to-u.from,0);return(a>0?a+c:a)>=s}function Wa(n,e,t={}){if(!e)return $t(n,null,t)||mr(n,null,t);let r=xn(e,n.schema);return r==="node"?$t(n,e,t):r==="mark"?mr(n,e,t):!1}var Jp=(n,e)=>{let{$from:t,$to:r,$anchor:o}=n.selection;if(e){let i=Sn(l=>l.type.name===e)(n.selection);if(!i)return!1;let s=n.doc.resolve(i.pos+1);return o.pos+1===s.end()}return!(r.parentOffset{let{$from:e,$to:t}=n.selection;return!(e.parentOffset>0||e.pos!==t.pos)};function ui(n,e){let{nodeExtensions:t}=yn(e),r=t.find(s=>s.name===n);if(!r)return!1;let o={name:r.name,options:r.options,storage:r.storage},i=N(x(r,"group",o));return typeof i!="string"?!1:i.split(" ").includes("list")}function Sr(n,{checkChildren:e=!0,ignoreWhitespace:t=!1}={}){var r;if(t){if(n.type.name==="hardBreak")return!0;if(n.isText)return/^\s*$/m.test((r=n.text)!==null&&r!==void 0?r:"")}if(n.isText)return!n.text;if(n.isAtom||n.isLeaf)return!1;if(n.content.childCount===0)return!0;if(e){let o=!0;return n.content.forEach(i=>{o!==!1&&(Sr(i,{ignoreWhitespace:t,checkChildren:e})||(o=!1))}),o}return!1}function Up(n){return n instanceof w}function Gp(n,e,t){let o=n.state.doc.content.size,i=Ee(e,0,o),s=Ee(t,0,o),l=n.coordsAtPos(i),a=n.coordsAtPos(s,-1),c=Math.min(l.top,a.top),d=Math.max(l.bottom,a.bottom),f=Math.min(l.left,a.left),u=Math.max(l.right,a.right),p=u-f,h=d-c,y={top:c,bottom:d,left:f,right:u,width:p,height:h,x:f,y:c};return{...y,toJSON:()=>y}}function Ka({json:n,validMarks:e,validNodes:t,options:r,rewrittenContent:o=[]}){return n.marks&&Array.isArray(n.marks)&&(n.marks=n.marks.filter(i=>{let s=typeof i=="string"?i:i.type;return e.has(s)?!0:(o.push({original:JSON.parse(JSON.stringify(i)),unsupported:s}),!1)})),n.content&&Array.isArray(n.content)&&(n.content=n.content.map(i=>Ka({json:i,validMarks:e,validNodes:t,options:r,rewrittenContent:o}).json).filter(i=>i!=null)),n.type&&!t.has(n.type)?(o.push({original:JSON.parse(JSON.stringify(n)),unsupported:n.type}),n.content&&Array.isArray(n.content)&&r?.fallbackToParagraph!==!1?(n.type="paragraph",{json:n,rewrittenContent:o}):{json:null,rewrittenContent:o}):{json:n,rewrittenContent:o}}function Yp(n,e,t){return Ka({json:n,validNodes:new Set(Object.keys(e.nodes)),validMarks:new Set(Object.keys(e.marks)),options:t})}function Xp(n,e,t){var r;let{selection:o}=e,i=null;if(Si(o)&&(i=o.$cursor),i){let l=(r=n.storedMarks)!==null&&r!==void 0?r:i.marks();return!!t.isInSet(l)||!l.some(a=>a.type.excludes(t))}let{ranges:s}=o;return s.some(({$from:l,$to:a})=>{let c=l.depth===0?n.doc.inlineContent&&n.doc.type.allowsMarkType(t):!1;return n.doc.nodesBetween(l.pos,a.pos,(d,f,u)=>{if(c)return!1;if(d.isInline){let p=!u||u.type.allowsMarkType(t),h=!!t.isInSet(d.marks)||!d.marks.some(m=>m.type.excludes(t));c=p&&h}return!c}),c})}var Zp=(n,e={})=>({tr:t,state:r,dispatch:o})=>{let{selection:i}=t,{empty:s,ranges:l}=i,a=ze(n,r.schema);if(o)if(s){let c=Mi(r,a);t.addStoredMark(a.create({...c,...e}))}else l.forEach(c=>{let d=c.$from.pos,f=c.$to.pos;r.doc.nodesBetween(d,f,(u,p)=>{let h=Math.max(p,d),m=Math.min(p+u.nodeSize,f);u.marks.find(y=>y.type===a)?u.marks.forEach(y=>{a===y.type&&t.addMark(h,m,a.create({...y.attrs,...e}))}):t.addMark(h,m,a.create(e))})});return Xp(r,t,a)},Qp=(n,e)=>({tr:t})=>(t.setMeta(n,e),!0),eh=(n,e={})=>({state:t,dispatch:r,chain:o})=>{let i=V(n,t.schema),s;return t.selection.$anchor.sameParent(t.selection.$head)&&(s=t.selection.$anchor.parent.attrs),i.isTextblock?o().command(({commands:l})=>sr(i,{...s,...e})(t)?!0:l.clearNodes()).command(({state:l})=>sr(i,{...s,...e})(l,r)).run():(console.warn('[tiptap warn]: Currently "setNode()" only supports text block nodes.'),!1)},th=n=>({tr:e,dispatch:t})=>{if(t){let{doc:r}=e,o=Ee(n,0,r.content.size),i=w.create(r,o);e.setSelection(i)}return!0},nh=n=>({tr:e,dispatch:t})=>{if(t){let{doc:r}=e,{from:o,to:i}=typeof n=="number"?{from:n,to:n}:n,s=O.atStart(r).from,l=O.atEnd(r).to,a=Ee(o,s,l),c=Ee(i,s,l),d=O.create(r,a,c);e.setSelection(d)}return!0},rh=n=>({state:e,dispatch:t})=>{let r=V(n,e.schema);return ri(r)(e,t)};function Ca(n,e){let t=n.storedMarks||n.selection.$to.parentOffset&&n.selection.$from.marks();if(t){let r=t.filter(o=>e?.includes(o.type.name));n.tr.ensureMarks(r)}}var oh=({keepMarks:n=!0}={})=>({tr:e,state:t,dispatch:r,editor:o})=>{let{selection:i,doc:s}=e,{$from:l,$to:a}=i,c=o.extensionManager.attributes,d=hn(c,l.node().type.name,l.node().attrs);if(i instanceof w&&i.node.isBlock)return!l.parentOffset||!ie(s,l.pos)?!1:(r&&(n&&Ca(t,o.extensionManager.splittableMarks),e.split(l.pos).scrollIntoView()),!0);if(!l.parent.isBlock)return!1;let f=a.parentOffset===a.parent.content.size,u=l.depth===0?void 0:za(l.node(-1).contentMatchAt(l.indexAfter(-1))),p=f&&u?[{type:u,attrs:d}]:void 0,h=ie(e.doc,e.mapping.map(l.pos),1,p);if(!p&&!h&&ie(e.doc,e.mapping.map(l.pos),1,u?[{type:u}]:void 0)&&(h=!0,p=u?[{type:u,attrs:d}]:void 0),r){if(h&&(i instanceof O&&e.deleteSelection(),e.split(e.mapping.map(l.pos),1,p),u&&!f&&!l.parentOffset&&l.parent.type!==u)){let m=e.mapping.map(l.before()),g=e.doc.resolve(m);l.node(-1).canReplaceWith(g.index(),g.index()+1,u)&&e.setNodeMarkup(e.mapping.map(l.before()),u)}n&&Ca(t,o.extensionManager.splittableMarks),e.scrollIntoView()}return h},ih=(n,e={})=>({tr:t,state:r,dispatch:o,editor:i})=>{var s;let l=V(n,r.schema),{$from:a,$to:c}=r.selection,d=r.selection.node;if(d&&d.isBlock||a.depth<2||!a.sameParent(c))return!1;let f=a.node(-1);if(f.type!==l)return!1;let u=i.extensionManager.attributes;if(a.parent.content.size===0&&a.node(-1).childCount===a.indexAfter(-1)){if(a.depth===2||a.node(-3).type!==l||a.index(-2)!==a.node(-2).childCount-1)return!1;if(o){let y=b.empty,S=a.index(-1)?1:a.index(-2)?2:3;for(let D=a.depth-S;D>=a.depth-3;D-=1)y=b.from(a.node(D).copy(y));let M=a.indexAfter(-1){if(T>-1)return!1;D.isTextblock&&D.content.size===0&&(T=Y+1)}),T>-1&&t.setSelection(O.near(t.doc.resolve(T))),t.scrollIntoView()}return!0}let p=c.pos===a.end()?f.contentMatchAt(0).defaultType:null,h={...hn(u,f.type.name,f.attrs),...e},m={...hn(u,a.node().type.name,a.node().attrs),...e};t.delete(a.pos,c.pos);let g=p?[{type:l,attrs:h},{type:p,attrs:m}]:[{type:l,attrs:h}];if(!ie(t.doc,a.pos,2))return!1;if(o){let{selection:y,storedMarks:S}=r,{splittableMarks:M}=i.extensionManager,v=S||y.$to.parentOffset&&y.$from.marks();if(t.split(a.pos,2,g).scrollIntoView(),!v||!o)return!0;let A=v.filter(P=>M.includes(P.type.name));t.ensureMarks(A)}return!0},ii=(n,e)=>{let t=Sn(s=>s.type===e)(n.selection);if(!t)return!0;let r=n.doc.resolve(Math.max(0,t.pos-1)).before(t.depth);if(r===void 0)return!0;let o=n.doc.nodeAt(r);return t.node.type===o?.type&&ae(n.doc,t.pos)&&n.join(t.pos),!0},si=(n,e)=>{let t=Sn(s=>s.type===e)(n.selection);if(!t)return!0;let r=n.doc.resolve(t.start).after(t.depth);if(r===void 0)return!0;let o=n.doc.nodeAt(r);return t.node.type===o?.type&&ae(n.doc,r)&&n.join(r),!0},sh=(n,e,t,r={})=>({editor:o,tr:i,state:s,dispatch:l,chain:a,commands:c,can:d})=>{let{extensions:f,splittableMarks:u}=o.extensionManager,p=V(n,s.schema),h=V(e,s.schema),{selection:m,storedMarks:g}=s,{$from:y,$to:S}=m,M=y.blockRange(S),v=g||m.$to.parentOffset&&m.$from.marks();if(!M)return!1;let A=Sn(P=>ui(P.type.name,f))(m);if(M.depth>=1&&A&&M.depth-A.depth<=1){if(A.node.type===p)return c.liftListItem(h);if(ui(A.node.type.name,f)&&p.validContent(A.node.content)&&l)return a().command(()=>(i.setNodeMarkup(A.pos,p),!0)).command(()=>ii(i,p)).command(()=>si(i,p)).run()}return!t||!v||!l?a().command(()=>d().wrapInList(p,r)?!0:c.clearNodes()).wrapInList(p,r).command(()=>ii(i,p)).command(()=>si(i,p)).run():a().command(()=>{let P=d().wrapInList(p,r),T=v.filter(D=>u.includes(D.type.name));return i.ensureMarks(T),P?!0:c.clearNodes()}).wrapInList(p,r).command(()=>ii(i,p)).command(()=>si(i,p)).run()},lh=(n,e={},t={})=>({state:r,commands:o})=>{let{extendEmptyMarkRange:i=!1}=t,s=ze(n,r.schema);return mr(r,s,e)?o.unsetMark(s,{extendEmptyMarkRange:i}):o.setMark(s,e)},ah=(n,e,t={})=>({state:r,commands:o})=>{let i=V(n,r.schema),s=V(e,r.schema),l=$t(r,i,t),a;return r.selection.$anchor.sameParent(r.selection.$head)&&(a=r.selection.$anchor.parent.attrs),l?o.setNode(s,a):o.setNode(i,{...a,...t})},ch=(n,e={})=>({state:t,commands:r})=>{let o=V(n,t.schema);return $t(t,o,e)?r.lift(o):r.wrapIn(o,e)},dh=()=>({state:n,dispatch:e})=>{let t=n.plugins;for(let r=0;r=0;a-=1)s.step(l.steps[a].invert(l.docs[a]));if(i.text){let a=s.doc.resolve(i.from).marks();s.replaceWith(i.from,i.to,n.schema.text(i.text,a))}else s.delete(i.from,i.to)}return!0}}return!1},fh=()=>({tr:n,dispatch:e})=>{let{selection:t}=n,{empty:r,ranges:o}=t;return r||e&&o.forEach(i=>{n.removeMark(i.$from.pos,i.$to.pos)}),!0},uh=(n,e={})=>({tr:t,state:r,dispatch:o})=>{var i;let{extendEmptyMarkRange:s=!1}=e,{selection:l}=t,a=ze(n,r.schema),{$from:c,empty:d,ranges:f}=l;if(!o)return!0;if(d&&s){let{from:u,to:p}=l,h=(i=c.marks().find(g=>g.type===a))===null||i===void 0?void 0:i.attrs,m=kr(c,a,h);m&&(u=m.from,p=m.to),t.removeMark(u,p,a)}else f.forEach(u=>{t.removeMark(u.$from.pos,u.$to.pos,a)});return t.removeStoredMark(a),!0},ph=(n,e={})=>({tr:t,state:r,dispatch:o})=>{let i=null,s=null,l=xn(typeof n=="string"?n:n.name,r.schema);return l?(l==="node"&&(i=V(n,r.schema)),l==="mark"&&(s=ze(n,r.schema)),o&&t.selection.ranges.forEach(a=>{let c=a.$from.pos,d=a.$to.pos,f,u,p,h;t.selection.empty?r.doc.nodesBetween(c,d,(m,g)=>{i&&i===m.type&&(p=Math.max(g,c),h=Math.min(g+m.nodeSize,d),f=g,u=m)}):r.doc.nodesBetween(c,d,(m,g)=>{g=c&&g<=d&&(i&&i===m.type&&t.setNodeMarkup(g,void 0,{...m.attrs,...e}),s&&m.marks.length&&m.marks.forEach(y=>{if(s===y.type){let S=Math.max(g,c),M=Math.min(g+m.nodeSize,d);t.addMark(S,M,s.create({...y.attrs,...e}))}}))}),u&&(f!==void 0&&t.setNodeMarkup(f,void 0,{...u.attrs,...e}),s&&u.marks.length&&u.marks.forEach(m=>{s===m.type&&t.addMark(p,h,s.create({...m.attrs,...e}))}))}),!0):!1},hh=(n,e={})=>({state:t,dispatch:r})=>{let o=V(n,t.schema);return Xo(o,e)(t,r)},mh=(n,e={})=>({state:t,dispatch:r})=>{let o=V(n,t.schema);return ti(o,e)(t,r)},gh=Object.freeze({__proto__:null,blur:Gu,clearContent:Yu,clearNodes:Xu,command:Zu,createParagraphNear:Qu,cut:ep,deleteCurrentNode:tp,deleteNode:np,deleteRange:rp,deleteSelection:op,enter:ip,exitCode:sp,extendMarkRange:lp,first:ap,focus:cp,forEach:dp,insertContent:fp,insertContentAt:pp,joinBackward:gp,joinDown:mp,joinForward:yp,joinItemBackward:bp,joinItemForward:kp,joinTextblockBackward:xp,joinTextblockForward:Sp,joinUp:hp,keyboardShortcut:Cp,lift:Mp,liftEmptyBlock:Ep,liftListItem:Op,newlineInCode:Tp,resetAttributes:Np,scrollIntoView:Ap,selectAll:vp,selectNodeBackward:Dp,selectNodeForward:Rp,selectParentNode:Ip,selectTextblockEnd:_p,selectTextblockStart:Pp,setContent:Bp,setMark:Zp,setMeta:Qp,setNode:eh,setNodeSelection:th,setTextSelection:nh,sinkListItem:rh,splitBlock:oh,splitListItem:ih,toggleList:sh,toggleMark:lh,toggleNode:ah,toggleWrap:ch,undoInputRule:dh,unsetAllMarks:fh,unsetMark:uh,updateAttributes:ph,wrapIn:hh,wrapInList:mh}),Ha=ge.create({name:"commands",addCommands(){return{...gh}}}),Ja=ge.create({name:"drop",addProseMirrorPlugins(){return[new B({key:new K("tiptapDrop"),props:{handleDrop:(n,e,t,r)=>{this.editor.emit("drop",{editor:this.editor,event:e,slice:t,moved:r})}}})]}}),qa=ge.create({name:"editable",addProseMirrorPlugins(){return[new B({key:new K("editable"),props:{editable:()=>this.editor.options.editable}})]}}),Ua=new K("focusEvents"),Ga=ge.create({name:"focusEvents",addProseMirrorPlugins(){let{editor:n}=this;return[new B({key:Ua,props:{handleDOMEvents:{focus:(e,t)=>{n.isFocused=!0;let r=n.state.tr.setMeta("focus",{event:t}).setMeta("addToHistory",!1);return e.dispatch(r),!1},blur:(e,t)=>{n.isFocused=!1;let r=n.state.tr.setMeta("blur",{event:t}).setMeta("addToHistory",!1);return e.dispatch(r),!1}}}})]}}),Ya=ge.create({name:"keymap",addKeyboardShortcuts(){let n=()=>this.editor.commands.first(({commands:s})=>[()=>s.undoInputRule(),()=>s.command(({tr:l})=>{let{selection:a,doc:c}=l,{empty:d,$anchor:f}=a,{pos:u,parent:p}=f,h=f.parent.isTextblock&&u>0?l.doc.resolve(u-1):f,m=h.parent.type.spec.isolating,g=f.pos-f.parentOffset,y=m&&h.parent.childCount===1?g===f.pos:C.atStart(c).from===u;return!d||!p.type.isTextblock||p.textContent.length||!y||y&&f.parent.type.name==="paragraph"?!1:s.clearNodes()}),()=>s.deleteSelection(),()=>s.joinBackward(),()=>s.selectNodeBackward()]),e=()=>this.editor.commands.first(({commands:s})=>[()=>s.deleteSelection(),()=>s.deleteCurrentNode(),()=>s.joinForward(),()=>s.selectNodeForward()]),r={Enter:()=>this.editor.commands.first(({commands:s})=>[()=>s.newlineInCode(),()=>s.createParagraphNear(),()=>s.liftEmptyBlock(),()=>s.splitBlock()]),"Mod-Enter":()=>this.editor.commands.exitCode(),Backspace:n,"Mod-Backspace":n,"Shift-Backspace":n,Delete:e,"Mod-Delete":e,"Mod-a":()=>this.editor.commands.selectAll()},o={...r},i={...r,"Ctrl-h":n,"Alt-Backspace":n,"Ctrl-d":e,"Ctrl-Alt-Backspace":e,"Alt-Delete":e,"Alt-d":e,"Ctrl-a":()=>this.editor.commands.selectTextblockStart(),"Ctrl-e":()=>this.editor.commands.selectTextblockEnd()};return Ft()||Ci()?i:o},addProseMirrorPlugins(){return[new B({key:new K("clearDocument"),appendTransaction:(n,e,t)=>{if(n.some(m=>m.getMeta("composition")))return;let r=n.some(m=>m.docChanged)&&!e.doc.eq(t.doc),o=n.some(m=>m.getMeta("preventClearDocument"));if(!r||o)return;let{empty:i,from:s,to:l}=e.selection,a=C.atStart(e.doc).from,c=C.atEnd(e.doc).to;if(i||!(s===a&&l===c)||!Sr(t.doc))return;let u=t.tr,p=gn({state:t,transaction:u}),{commands:h}=new mt({editor:this.editor,state:p});if(h.clearNodes(),!!u.steps.length)return u}})]}}),Xa=ge.create({name:"paste",addProseMirrorPlugins(){return[new B({key:new K("tiptapPaste"),props:{handlePaste:(n,e,t)=>{this.editor.emit("paste",{editor:this.editor,event:e,slice:t})}}})]}}),Za=ge.create({name:"tabindex",addProseMirrorPlugins(){return[new B({key:new K("tabindex"),props:{attributes:()=>this.editor.isEditable?{tabindex:"0"}:{}}})]}}),yh=Object.freeze({__proto__:null,ClipboardTextSerializer:Ra,Commands:Ha,Drop:Ja,Editable:qa,FocusEvents:Ga,Keymap:Ya,Paste:Xa,Tabindex:Za,focusEventsPluginKey:Ua}),gr=class n{get name(){return this.node.type.name}constructor(e,t,r=!1,o=null){this.currentNode=null,this.actualDepth=null,this.isBlock=r,this.resolvedPos=e,this.editor=t,this.currentNode=o}get node(){return this.currentNode||this.resolvedPos.node()}get element(){return this.editor.view.domAtPos(this.pos).node}get depth(){var e;return(e=this.actualDepth)!==null&&e!==void 0?e:this.resolvedPos.depth}get pos(){return this.resolvedPos.pos}get content(){return this.node.content}set content(e){let t=this.from,r=this.to;if(this.isBlock){if(this.content.size===0){console.error(`You can\u2019t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);return}t=this.from+1,r=this.to-1}this.editor.commands.insertContentAt({from:t,to:r},e)}get attributes(){return this.node.attrs}get textContent(){return this.node.textContent}get size(){return this.node.nodeSize}get from(){return this.isBlock?this.pos:this.resolvedPos.start(this.resolvedPos.depth)}get range(){return{from:this.from,to:this.to}}get to(){return this.isBlock?this.pos+this.size:this.resolvedPos.end(this.resolvedPos.depth)+(this.node.isText?0:1)}get parent(){if(this.depth===0)return null;let e=this.resolvedPos.start(this.resolvedPos.depth-1),t=this.resolvedPos.doc.resolve(e);return new n(t,this.editor)}get before(){let e=this.resolvedPos.doc.resolve(this.from-(this.isBlock?1:2));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.from-3)),new n(e,this.editor)}get after(){let e=this.resolvedPos.doc.resolve(this.to+(this.isBlock?2:1));return e.depth!==this.depth&&(e=this.resolvedPos.doc.resolve(this.to+3)),new n(e,this.editor)}get children(){let e=[];return this.node.content.forEach((t,r)=>{let o=t.isBlock&&!t.isTextblock,i=t.isAtom&&!t.isText,s=this.pos+r+(i?0:1);if(s<0||s>this.resolvedPos.doc.nodeSize-2)return;let l=this.resolvedPos.doc.resolve(s);if(!o&&l.depth<=this.depth)return;let a=new n(l,this.editor,o,o?t:null);o&&(a.actualDepth=this.depth+1),e.push(new n(l,this.editor,o,o?t:null))}),e}get firstChild(){return this.children[0]||null}get lastChild(){let e=this.children;return e[e.length-1]||null}closest(e,t={}){let r=null,o=this.parent;for(;o&&!r;){if(o.node.type.name===e)if(Object.keys(t).length>0){let i=o.node.attrs,s=Object.keys(t);for(let l=0;l{r&&o.length>0||(s.node.type.name===e&&i.every(a=>t[a]===s.node.attrs[a])&&o.push(s),!(r&&o.length>0)&&(o=o.concat(s.querySelectorAll(e,t,r))))}),o}setAttribute(e){let{tr:t}=this.editor.state;t.setNodeMarkup(this.from,void 0,{...this.node.attrs,...e}),this.editor.view.dispatch(t)}},bh=`.ProseMirror { position: relative; } @@ -86,6 +86,6 @@ img.ProseMirror-separator { .tippy-box[data-animation=fade][data-state=hidden] { opacity: 0 -}`;function ka(n,e,t){let r=document.querySelector(`style[data-tiptap-style${t?`-${t}`:""}]`);if(r!==null)return r;let i=document.createElement("style");return e&&i.setAttribute("nonce",e),i.setAttribute(`data-tiptap-style${t?`-${t}`:""}`,""),i.innerHTML=n,document.getElementsByTagName("head")[0].appendChild(i),i}var Wi=class extends zi{constructor(e={}){super(),this.isFocused=!1,this.isInitialized=!1,this.extensionStorage={},this.options={element:document.createElement("div"),content:"",injectCSS:!0,injectNonce:void 0,extensions:[],autofocus:!1,editable:!0,editorProps:{},parseOptions:{},coreExtensionOptions:{},enableInputRules:!0,enablePasteRules:!0,enableCoreExtensions:!0,enableContentCheck:!1,emitContentError:!1,onBeforeCreate:()=>null,onCreate:()=>null,onUpdate:()=>null,onSelectionUpdate:()=>null,onTransaction:()=>null,onFocus:()=>null,onBlur:()=>null,onDestroy:()=>null,onContentError:({error:t})=>{throw t},onPaste:()=>null,onDrop:()=>null},this.isCapturingTransaction=!1,this.capturedTransaction=null,this.setOptions(e),this.createExtensionManager(),this.createCommandManager(),this.createSchema(),this.on("beforeCreate",this.options.onBeforeCreate),this.emit("beforeCreate",{editor:this}),this.on("contentError",this.options.onContentError),this.createView(),this.injectCSS(),this.on("create",this.options.onCreate),this.on("update",this.options.onUpdate),this.on("selectionUpdate",this.options.onSelectionUpdate),this.on("transaction",this.options.onTransaction),this.on("focus",this.options.onFocus),this.on("blur",this.options.onBlur),this.on("destroy",this.options.onDestroy),this.on("drop",({event:t,slice:r,moved:i})=>this.options.onDrop(t,r,i)),this.on("paste",({event:t,slice:r})=>this.options.onPaste(t,r)),window.setTimeout(()=>{this.isDestroyed||(this.commands.focus(this.options.autofocus),this.emit("create",{editor:this}),this.isInitialized=!0)},0)}get storage(){return this.extensionStorage}get commands(){return this.commandManager.commands}chain(){return this.commandManager.chain()}can(){return this.commandManager.can()}injectCSS(){this.options.injectCSS&&document&&(this.css=ka(rp,this.options.injectNonce))}setOptions(e={}){this.options={...this.options,...e},!(!this.view||!this.state||this.isDestroyed)&&(this.options.editorProps&&this.view.setProps(this.options.editorProps),this.view.updateState(this.state))}setEditable(e,t=!0){this.setOptions({editable:e}),t&&this.emit("update",{editor:this,transaction:this.state.tr})}get isEditable(){return this.options.editable&&this.view&&this.view.editable}get state(){return this.view.state}registerPlugin(e,t){let r=Ui(t)?t(e,[...this.state.plugins]):[...this.state.plugins,e],i=this.state.reconfigure({plugins:r});return this.view.updateState(i),i}unregisterPlugin(e){if(this.isDestroyed)return;let t=this.state.plugins,r=t;if([].concat(e).forEach(o=>{let s=typeof o=="string"?`${o}$`:o.key;r=r.filter(l=>!l.key.startsWith(s))}),t.length===r.length)return;let i=this.state.reconfigure({plugins:r});return this.view.updateState(i),i}createExtensionManager(){var e,t;let i=[...this.options.enableCoreExtensions?[fa,Xl.configure({blockSeparator:(t=(e=this.options.coreExtensionOptions)===null||e===void 0?void 0:e.clipboardTextSerializer)===null||t===void 0?void 0:t.blockSeparator}),da,ha,ma,ya,ua,ga].filter(o=>typeof this.options.enableCoreExtensions=="object"?this.options.enableCoreExtensions[o.name]!==!1:!0):[],...this.options.extensions].filter(o=>["extension","node","mark"].includes(o?.type));this.extensionManager=new Xn(i,this)}createCommandManager(){this.commandManager=new ot({editor:this})}createSchema(){this.schema=this.extensionManager.schema}createView(){var e;let t;try{t=Zn(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:this.options.enableContentCheck})}catch(s){if(!(s instanceof Error)||!["[tiptap error]: Invalid JSON content","[tiptap error]: Invalid HTML content"].includes(s.message))throw s;this.emit("contentError",{editor:this,error:s,disableCollaboration:()=>{this.storage.collaboration&&(this.storage.collaboration.isDisabled=!0),this.options.extensions=this.options.extensions.filter(l=>l.name!=="collaboration"),this.createExtensionManager()}}),t=Zn(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:!1})}let r=Zi(t,this.options.autofocus);this.view=new wt(this.options.element,{...this.options.editorProps,attributes:{role:"textbox",...(e=this.options.editorProps)===null||e===void 0?void 0:e.attributes},dispatchTransaction:this.dispatchTransaction.bind(this),state:jt.create({doc:t,selection:r||void 0})});let i=this.state.reconfigure({plugins:this.extensionManager.plugins});this.view.updateState(i),this.createNodeViews(),this.prependClass();let o=this.view.dom;o.editor=this}createNodeViews(){this.view.isDestroyed||this.view.setProps({nodeViews:this.extensionManager.nodeViews})}prependClass(){this.view.dom.className=`tiptap ${this.view.dom.className}`}captureTransaction(e){this.isCapturingTransaction=!0,e(),this.isCapturingTransaction=!1;let t=this.capturedTransaction;return this.capturedTransaction=null,t}dispatchTransaction(e){if(this.view.isDestroyed)return;if(this.isCapturingTransaction){if(!this.capturedTransaction){this.capturedTransaction=e;return}e.steps.forEach(s=>{var l;return(l=this.capturedTransaction)===null||l===void 0?void 0:l.step(s)});return}let t=this.state.apply(e),r=!this.state.selection.eq(t.selection);this.emit("beforeTransaction",{editor:this,transaction:e,nextState:t}),this.view.updateState(t),this.emit("transaction",{editor:this,transaction:e}),r&&this.emit("selectionUpdate",{editor:this,transaction:e});let i=e.getMeta("focus"),o=e.getMeta("blur");i&&this.emit("focus",{editor:this,event:i.event,transaction:e}),o&&this.emit("blur",{editor:this,event:o.event,transaction:e}),!(!e.docChanged||e.getMeta("preventUpdate"))&&this.emit("update",{editor:this,transaction:e})}getAttributes(e){return oa(this.state,e)}isActive(e,t){let r=typeof e=="string"?e:null,i=typeof e=="string"?t:e;return aa(this.state,r,i)}getJSON(){return this.state.doc.toJSON()}getHTML(){return on(this.state.doc.content,this.schema)}getText(e){let{blockSeparator:t=` +}`;function Qa(n,e,t){let r=document.querySelector(`style[data-tiptap-style${t?`-${t}`:""}]`);if(r!==null)return r;let o=document.createElement("style");return e&&o.setAttribute("nonce",e),o.setAttribute(`data-tiptap-style${t?`-${t}`:""}`,""),o.innerHTML=n,document.getElementsByTagName("head")[0].appendChild(o),o}var pi=class extends li{constructor(e={}){super(),this.isFocused=!1,this.isInitialized=!1,this.extensionStorage={},this.options={element:document.createElement("div"),content:"",injectCSS:!0,injectNonce:void 0,extensions:[],autofocus:!1,editable:!0,editorProps:{},parseOptions:{},coreExtensionOptions:{},enableInputRules:!0,enablePasteRules:!0,enableCoreExtensions:!0,enableContentCheck:!1,emitContentError:!1,onBeforeCreate:()=>null,onCreate:()=>null,onUpdate:()=>null,onSelectionUpdate:()=>null,onTransaction:()=>null,onFocus:()=>null,onBlur:()=>null,onDestroy:()=>null,onContentError:({error:t})=>{throw t},onPaste:()=>null,onDrop:()=>null},this.isCapturingTransaction=!1,this.capturedTransaction=null,this.setOptions(e),this.createExtensionManager(),this.createCommandManager(),this.createSchema(),this.on("beforeCreate",this.options.onBeforeCreate),this.emit("beforeCreate",{editor:this}),this.on("contentError",this.options.onContentError),this.createView(),this.injectCSS(),this.on("create",this.options.onCreate),this.on("update",this.options.onUpdate),this.on("selectionUpdate",this.options.onSelectionUpdate),this.on("transaction",this.options.onTransaction),this.on("focus",this.options.onFocus),this.on("blur",this.options.onBlur),this.on("destroy",this.options.onDestroy),this.on("drop",({event:t,slice:r,moved:o})=>this.options.onDrop(t,r,o)),this.on("paste",({event:t,slice:r})=>this.options.onPaste(t,r)),window.setTimeout(()=>{this.isDestroyed||(this.commands.focus(this.options.autofocus),this.emit("create",{editor:this}),this.isInitialized=!0)},0)}get storage(){return this.extensionStorage}get commands(){return this.commandManager.commands}chain(){return this.commandManager.chain()}can(){return this.commandManager.can()}injectCSS(){this.options.injectCSS&&document&&(this.css=Qa(bh,this.options.injectNonce))}setOptions(e={}){this.options={...this.options,...e},!(!this.view||!this.state||this.isDestroyed)&&(this.options.editorProps&&this.view.setProps(this.options.editorProps),this.view.updateState(this.state))}setEditable(e,t=!0){this.setOptions({editable:e}),t&&this.emit("update",{editor:this,transaction:this.state.tr})}get isEditable(){return this.options.editable&&this.view&&this.view.editable}get state(){return this.view.state}registerPlugin(e,t){let r=bi(t)?t(e,[...this.state.plugins]):[...this.state.plugins,e],o=this.state.reconfigure({plugins:r});return this.view.updateState(o),o}unregisterPlugin(e){if(this.isDestroyed)return;let t=this.state.plugins,r=t;if([].concat(e).forEach(i=>{let s=typeof i=="string"?`${i}$`:i.key;r=r.filter(l=>!l.key.startsWith(s))}),t.length===r.length)return;let o=this.state.reconfigure({plugins:r});return this.view.updateState(o),o}createExtensionManager(){var e,t;let o=[...this.options.enableCoreExtensions?[qa,Ra.configure({blockSeparator:(t=(e=this.options.coreExtensionOptions)===null||e===void 0?void 0:e.clipboardTextSerializer)===null||t===void 0?void 0:t.blockSeparator}),Ha,Ga,Ya,Za,Ja,Xa].filter(i=>typeof this.options.enableCoreExtensions=="object"?this.options.enableCoreExtensions[i.name]!==!1:!0):[],...this.options.extensions].filter(i=>["extension","node","mark"].includes(i?.type));this.extensionManager=new pr(o,this)}createCommandManager(){this.commandManager=new mt({editor:this})}createSchema(){this.schema=this.extensionManager.schema}createView(){var e;let t;try{t=hr(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:this.options.enableContentCheck})}catch(s){if(!(s instanceof Error)||!["[tiptap error]: Invalid JSON content","[tiptap error]: Invalid HTML content"].includes(s.message))throw s;this.emit("contentError",{editor:this,error:s,disableCollaboration:()=>{this.storage.collaboration&&(this.storage.collaboration.isDisabled=!0),this.options.extensions=this.options.extensions.filter(l=>l.name!=="collaboration"),this.createExtensionManager()}}),t=hr(this.options.content,this.schema,this.options.parseOptions,{errorOnInvalidContent:!1})}let r=wi(t,this.options.autofocus);this.view=new It(this.options.element,{...this.options.editorProps,attributes:{role:"textbox",...(e=this.options.editorProps)===null||e===void 0?void 0:e.attributes},dispatchTransaction:this.dispatchTransaction.bind(this),state:tn.create({doc:t,selection:r||void 0})});let o=this.state.reconfigure({plugins:this.extensionManager.plugins});this.view.updateState(o),this.createNodeViews(),this.prependClass();let i=this.view.dom;i.editor=this}createNodeViews(){this.view.isDestroyed||this.view.setProps({nodeViews:this.extensionManager.nodeViews})}prependClass(){this.view.dom.className=`tiptap ${this.view.dom.className}`}captureTransaction(e){this.isCapturingTransaction=!0,e(),this.isCapturingTransaction=!1;let t=this.capturedTransaction;return this.capturedTransaction=null,t}dispatchTransaction(e){if(this.view.isDestroyed)return;if(this.isCapturingTransaction){if(!this.capturedTransaction){this.capturedTransaction=e;return}e.steps.forEach(s=>{var l;return(l=this.capturedTransaction)===null||l===void 0?void 0:l.step(s)});return}let t=this.state.apply(e),r=!this.state.selection.eq(t.selection);this.emit("beforeTransaction",{editor:this,transaction:e,nextState:t}),this.view.updateState(t),this.emit("transaction",{editor:this,transaction:e}),r&&this.emit("selectionUpdate",{editor:this,transaction:e});let o=e.getMeta("focus"),i=e.getMeta("blur");o&&this.emit("focus",{editor:this,event:o.event,transaction:e}),i&&this.emit("blur",{editor:this,event:i.event,transaction:e}),!(!e.docChanged||e.getMeta("preventUpdate"))&&this.emit("update",{editor:this,transaction:e})}getAttributes(e){return $a(this.state,e)}isActive(e,t){let r=typeof e=="string"?e:null,o=typeof e=="string"?t:e;return Wa(this.state,r,o)}getJSON(){return this.state.doc.toJSON()}getHTML(){return bn(this.state.doc.content,this.schema)}getText(e){let{blockSeparator:t=` -`,textSerializers:r={}}=e||{};return to(this.state.doc,{blockSeparator:t,textSerializers:{...nr(this.schema),...r}})}get isEmpty(){return or(this.state.doc)}getCharacterCount(){return console.warn('[tiptap warn]: "editor.getCharacterCount()" is deprecated. Please use "editor.storage.characterCount.characters()" instead.'),this.state.doc.content.size-2}destroy(){if(this.emit("destroy"),this.view){let e=this.view.dom;e&&e.editor&&delete e.editor,this.view.destroy()}this.removeAllListeners()}get isDestroyed(){var e;return!(!((e=this.view)===null||e===void 0)&&e.docView)}$node(e,t){var r;return((r=this.$doc)===null||r===void 0?void 0:r.querySelector(e,t))||null}$nodes(e,t){var r;return((r=this.$doc)===null||r===void 0?void 0:r.querySelectorAll(e,t))||null}$pos(e){let t=this.state.doc.resolve(e);return new er(t,this)}get $doc(){return this.$pos(0)}};function ip(n){return new $e({find:n.find,handler:({state:e,range:t,match:r})=>{let i=N(n.getAttributes,void 0,r);if(i===!1||i===null)return null;let{tr:o}=e,s=r[r.length-1],l=r[0];if(s){let a=l.search(/\S/),c=t.from+l.indexOf(s),d=c+s.length;if(no(t.from,t.to,e.doc).filter(p=>p.mark.type.excluded.find(m=>m===n.type&&m!==p.mark.type)).filter(p=>p.to>c).length)return null;dt.from&&o.delete(t.from+a,c);let f=t.from+a+s.length;o.addMark(t.from+a,f,n.type.create(i||{})),o.removeStoredMark(n.type)}}})}function op(n){return new $e({find:n.find,handler:({state:e,range:t,match:r})=>{let i=N(n.getAttributes,void 0,r)||{},{tr:o}=e,s=t.from,l=t.to,a=n.type.create(i);if(r[1]){let c=r[0].lastIndexOf(r[1]),d=s+c;d>l?d=l:l=d+r[1].length;let u=r[0][r[0].length-1];o.insertText(u,s+r[0].length-1),o.replaceWith(d,l,a)}else if(r[0]){let c=n.type.isInline?s:s-1;o.insert(c,n.type.create(i)).delete(o.mapping.map(s),o.mapping.map(l))}o.scrollIntoView()}})}function sp(n){return new $e({find:n.find,handler:({state:e,range:t,match:r})=>{let i=e.doc.resolve(t.from),o=N(n.getAttributes,void 0,r)||{};if(!i.node(-1).canReplaceWith(i.index(-1),i.indexAfter(-1),n.type))return null;e.tr.delete(t.from,t.to).setBlockType(t.from,t.from,n.type,o)}})}function lp(n){return new $e({find:n.find,handler:({state:e,range:t,match:r})=>{let i=n.replace,o=t.from,s=t.to;if(r[1]){let l=r[0].lastIndexOf(r[1]);i+=r[0].slice(l+r[1].length),o+=l;let a=o-s;a>0&&(i=r[0].slice(l-a,l)+i,o=s)}e.tr.insertText(i,o,s)}})}function ap(n){return new $e({find:n.find,handler:({state:e,range:t,match:r,chain:i})=>{let o=N(n.getAttributes,void 0,r)||{},s=e.tr.delete(t.from,t.to),a=s.doc.resolve(t.from).blockRange(),c=a&&qe(a,n.type,o);if(!c)return null;if(s.wrap(a,c),n.keepMarks&&n.editor){let{selection:u,storedMarks:f}=e,{splittableMarks:p}=n.editor.extensionManager,h=f||u.$to.parentOffset&&u.$from.marks();if(h){let m=h.filter(g=>p.includes(g.type.name));s.ensureMarks(m)}}if(n.keepAttributes){let u=n.type.name==="bulletList"||n.type.name==="orderedList"?"listItem":"taskList";i().updateAttributes(u,o).run()}let d=s.doc.resolve(t.from-1).nodeBefore;d&&d.type===n.type&&re(s.doc,t.from-1)&&(!n.joinPredicate||n.joinPredicate(r,d))&&s.join(t.from-1)}})}var Ki=class n{constructor(e={}){this.type="node",this.name="node",this.parent=null,this.child=null,this.config={name:this.name,defaultOptions:{}},this.config={...this.config,...e},this.name=this.config.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`),this.options=this.config.defaultOptions,this.config.addOptions&&(this.options=N(x(this,"addOptions",{name:this.name}))),this.storage=N(x(this,"addStorage",{name:this.name,options:this.options}))||{}}static create(e={}){return new n(e)}configure(e={}){let t=this.extend({...this.config,addOptions:()=>sn(this.options,e)});return t.name=this.name,t.parent=this.parent,t}extend(e={}){let t=new n(e);return t.parent=this,this.child=t,t.name=e.name?e.name:t.parent.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${t.name}".`),t.options=N(x(t,"addOptions",{name:t.name})),t.storage=N(x(t,"addStorage",{name:t.name,options:t.options})),t}},Ji=class{constructor(e,t,r){this.isDragging=!1,this.component=e,this.editor=t.editor,this.options={stopEvent:null,ignoreMutation:null,...r},this.extension=t.extension,this.node=t.node,this.decorations=t.decorations,this.innerDecorations=t.innerDecorations,this.view=t.view,this.HTMLAttributes=t.HTMLAttributes,this.getPos=t.getPos,this.mount()}mount(){}get dom(){return this.editor.view.dom}get contentDOM(){return null}onDragStart(e){var t,r,i,o,s,l,a;let{view:c}=this.editor,d=e.target,u=d.nodeType===3?(t=d.parentElement)===null||t===void 0?void 0:t.closest("[data-drag-handle]"):d.closest("[data-drag-handle]");if(!this.dom||!((r=this.contentDOM)===null||r===void 0)&&r.contains(d)||!u)return;let f=0,p=0;if(this.dom!==u){let w=this.dom.getBoundingClientRect(),M=u.getBoundingClientRect(),A=(i=e.offsetX)!==null&&i!==void 0?i:(o=e.nativeEvent)===null||o===void 0?void 0:o.offsetX,v=(s=e.offsetY)!==null&&s!==void 0?s:(l=e.nativeEvent)===null||l===void 0?void 0:l.offsetY;f=M.x-w.x+A,p=M.y-w.y+v}let h=this.dom.cloneNode(!0);(a=e.dataTransfer)===null||a===void 0||a.setDragImage(h,f,p);let m=this.getPos();if(typeof m!="number")return;let g=S.create(c.state.doc,m),y=c.state.tr.setSelection(g);c.dispatch(y)}stopEvent(e){var t;if(!this.dom)return!1;if(typeof this.options.stopEvent=="function")return this.options.stopEvent({event:e});let r=e.target;if(!(this.dom.contains(r)&&!(!((t=this.contentDOM)===null||t===void 0)&&t.contains(r))))return!1;let o=e.type.startsWith("drag"),s=e.type==="drop";if((["INPUT","BUTTON","SELECT","TEXTAREA"].includes(r.tagName)||r.isContentEditable)&&!s&&!o)return!0;let{isEditable:a}=this.editor,{isDragging:c}=this,d=!!this.node.type.spec.draggable,u=S.isSelectable(this.node),f=e.type==="copy",p=e.type==="paste",h=e.type==="cut",m=e.type==="mousedown";if(!d&&u&&o&&e.target===this.dom&&e.preventDefault(),d&&o&&!c&&e.target===this.dom)return e.preventDefault(),!1;if(d&&a&&!c&&m){let g=r.closest("[data-drag-handle]");g&&(this.dom===g||this.dom.contains(g))&&(this.isDragging=!0,document.addEventListener("dragend",()=>{this.isDragging=!1},{once:!0}),document.addEventListener("drop",()=>{this.isDragging=!1},{once:!0}),document.addEventListener("mouseup",()=>{this.isDragging=!1},{once:!0}))}return!(c||s||f||p||h||m&&u)}ignoreMutation(e){return!this.dom||!this.contentDOM?!0:typeof this.options.ignoreMutation=="function"?this.options.ignoreMutation({mutation:e}):this.node.isLeaf||this.node.isAtom?!0:e.type==="selection"||this.dom.contains(e.target)&&e.type==="childList"&&(Tt()||Vi())&&this.editor.isFocused&&[...Array.from(e.addedNodes),...Array.from(e.removedNodes)].every(r=>r.isContentEditable)?!1:this.contentDOM===e.target&&e.type==="attributes"?!0:!this.contentDOM.contains(e.target)}updateAttributes(e){this.editor.commands.command(({tr:t})=>{let r=this.getPos();return typeof r!="number"?!1:(t.setNodeMarkup(r,void 0,{...this.node.attrs,...e}),!0)})}deleteNode(){let e=this.getPos();if(typeof e!="number")return;let t=e+this.node.nodeSize;this.editor.commands.deleteRange({from:e,to:t})}};function cp(n){return new Ot({find:n.find,handler:({state:e,range:t,match:r,pasteEvent:i})=>{let o=N(n.getAttributes,void 0,r,i);if(o===!1||o===null)return null;let{tr:s}=e,l=r[r.length-1],a=r[0],c=t.to;if(l){let d=a.search(/\S/),u=t.from+a.indexOf(l),f=u+l.length;if(no(t.from,t.to,e.doc).filter(h=>h.mark.type.excluded.find(g=>g===n.type&&g!==h.mark.type)).filter(h=>h.to>u).length)return null;ft.from&&s.delete(t.from+d,u),c=t.from+d+l.length,s.addMark(t.from+d,c,n.type.create(o||{})),s.removeStoredMark(n.type)}}})}function dp(n,e){let{selection:t}=n,{$from:r}=t;if(t instanceof S){let o=r.index();return r.parent.canReplaceWith(o,o+1,e)}let i=r.depth;for(;i>=0;){let o=r.index(i);if(r.node(i).contentMatchAt(o).matchType(e))return!0;i-=1}return!1}function up(n){return n.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}function fp(n){return typeof n=="string"}function pp(n){return new Ot({find:n.find,handler({match:e,chain:t,range:r,pasteEvent:i}){let o=N(n.getAttributes,void 0,e,i),s=N(n.getContent,void 0,o);if(o===!1||o===null)return null;let l={type:n.type.name,attrs:o};s&&(l.content=s),e.input&&t().deleteRange(r).insertContentAt(r.from,l)}})}function hp(n){return new Ot({find:n.find,handler:({state:e,range:t,match:r})=>{let i=n.replace,o=t.from,s=t.to;if(r[1]){let l=r[0].lastIndexOf(r[1]);i+=r[0].slice(l+r[1].length),o+=l;let a=o-s;a>0&&(i=r[0].slice(l-a,l)+i,o=s)}e.tr.insertText(i,o,s)}})}var Hi=class{constructor(e){this.transaction=e,this.currentStep=this.transaction.steps.length}map(e){let t=!1;return{position:this.transaction.steps.slice(this.currentStep).reduce((i,o)=>{let s=o.getMap().mapResult(i);return s.deleted&&(t=!0),s.pos},e),deleted:t}}};var oo={};ae(oo,{dropCursor:()=>mp});function mp(n={}){return new P({view(e){return new io(e,n)}})}var io=class{constructor(e,t){var r;this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.width=(r=t.width)!==null&&r!==void 0?r:1,this.color=t.color===!1?void 0:t.color||"black",this.class=t.class,this.handlers=["dragover","dragend","drop","dragleave"].map(i=>{let o=s=>{this[i](s)};return e.dom.addEventListener(i,o),{name:i,handler:o}})}destroy(){this.handlers.forEach(({name:e,handler:t})=>this.editorView.dom.removeEventListener(e,t))}update(e,t){this.cursorPos!=null&&t.doc!=e.state.doc&&(this.cursorPos>e.state.doc.content.size?this.setCursor(null):this.updateOverlay())}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),t=!e.parent.inlineContent,r,i=this.editorView.dom,o=i.getBoundingClientRect(),s=o.width/i.offsetWidth,l=o.height/i.offsetHeight;if(t){let u=e.nodeBefore,f=e.nodeAfter;if(u||f){let p=this.editorView.nodeDOM(this.cursorPos-(u?u.nodeSize:0));if(p){let h=p.getBoundingClientRect(),m=u?h.bottom:h.top;u&&f&&(m=(m+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let g=this.width/2*l;r={left:h.left,right:h.right,top:m-g,bottom:m+g}}}}if(!r){let u=this.editorView.coordsAtPos(this.cursorPos),f=this.width/2*s;r={left:u.left-f,right:u.left+f,top:u.top,bottom:u.bottom}}let a=this.editorView.dom.offsetParent;this.element||(this.element=a.appendChild(document.createElement("div")),this.class&&(this.element.className=this.class),this.element.style.cssText="position: absolute; z-index: 50; pointer-events: none;",this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle("prosemirror-dropcursor-block",t),this.element.classList.toggle("prosemirror-dropcursor-inline",!t);let c,d;if(!a||a==document.body&&getComputedStyle(a).position=="static")c=-pageXOffset,d=-pageYOffset;else{let u=a.getBoundingClientRect(),f=u.width/a.offsetWidth,p=u.height/a.offsetHeight;c=u.left-a.scrollLeft*f,d=u.top-a.scrollTop*p}this.element.style.left=(r.left-c)/s+"px",this.element.style.top=(r.top-d)/l+"px",this.element.style.width=(r.right-r.left)/s+"px",this.element.style.height=(r.bottom-r.top)/l+"px"}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}dragover(e){if(!this.editorView.editable)return;let t=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),r=t&&t.inside>=0&&this.editorView.state.doc.nodeAt(t.inside),i=r&&r.type.spec.disableDropCursor,o=typeof i=="function"?i(this.editorView,t,e):i;if(t&&!o){let s=t.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let l=Vt(this.editorView.state.doc,s,this.editorView.dragging.slice);l!=null&&(s=l)}this.setCursor(s),this.scheduleRemoval(5e3)}}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}};var lo={};ae(lo,{GapCursor:()=>W,gapCursor:()=>kp});var W=class n extends E{constructor(e){super(e,e)}map(e,t){let r=e.resolve(t.map(this.head));return n.valid(r)?new n(r):E.near(r)}content(){return b.empty}eq(e){return e instanceof n&&e.head==this.head}toJSON(){return{type:"gapcursor",pos:this.head}}static fromJSON(e,t){if(typeof t.pos!="number")throw new RangeError("Invalid input for GapCursor.fromJSON");return new n(e.resolve(t.pos))}getBookmark(){return new so(this.anchor)}static valid(e){let t=e.parent;if(t.inlineContent||!gp(e)||!yp(e))return!1;let r=t.type.spec.allowGapCursor;if(r!=null)return r;let i=t.contentMatchAt(e.index()).defaultType;return i&&i.isTextblock}static findGapCursorFrom(e,t,r=!1){e:for(;;){if(!r&&n.valid(e))return e;let i=e.pos,o=null;for(let s=e.depth;;s--){let l=e.node(s);if(t>0?e.indexAfter(s)0){o=l.child(t>0?e.indexAfter(s):e.index(s)-1);break}else if(s==0)return null;i+=t;let a=e.doc.resolve(i);if(n.valid(a))return a}for(;;){let s=t>0?o.firstChild:o.lastChild;if(!s){if(o.isAtom&&!o.isText&&!S.isSelectable(o)){e=e.doc.resolve(i+o.nodeSize*t),r=!1;continue e}break}o=s,i+=t;let l=e.doc.resolve(i);if(n.valid(l))return l}return null}}};W.prototype.visible=!1;W.findFrom=W.findGapCursorFrom;E.jsonID("gapcursor",W);var so=class n{constructor(e){this.pos=e}map(e){return new n(e.map(this.pos))}resolve(e){let t=e.resolve(this.pos);return W.valid(t)?new W(t):E.near(t)}};function ba(n){return n.isAtom||n.spec.isolating||n.spec.createGapCursor}function gp(n){for(let e=n.depth;e>=0;e--){let t=n.index(e),r=n.node(e);if(t==0){if(r.type.spec.isolating)return!0;continue}for(let i=r.child(t-1);;i=i.lastChild){if(i.childCount==0&&!i.inlineContent||ba(i.type))return!0;if(i.inlineContent)return!1}}return!0}function yp(n){for(let e=n.depth;e>=0;e--){let t=n.indexAfter(e),r=n.node(e);if(t==r.childCount){if(r.type.spec.isolating)return!0;continue}for(let i=r.child(t);;i=i.firstChild){if(i.childCount==0&&!i.inlineContent||ba(i.type))return!0;if(i.inlineContent)return!1}}return!0}function kp(){return new P({props:{decorations:Cp,createSelectionBetween(n,e,t){return e.pos==t.pos&&W.valid(t)?new W(t):null},handleClick:xp,handleKeyDown:bp,handleDOMEvents:{beforeinput:Sp}}})}var bp=In({ArrowLeft:sr("horiz",-1),ArrowRight:sr("horiz",1),ArrowUp:sr("vert",-1),ArrowDown:sr("vert",1)});function sr(n,e){let t=n=="vert"?e>0?"down":"up":e>0?"right":"left";return function(r,i,o){let s=r.selection,l=e>0?s.$to:s.$from,a=s.empty;if(s instanceof T){if(!o.endOfTextblock(t)||l.depth==0)return!1;a=!1,l=r.doc.resolve(e>0?l.after():l.before())}let c=W.findGapCursorFrom(l,e,a);return c?(i&&i(r.tr.setSelection(new W(c))),!0):!1}}function xp(n,e,t){if(!n||!n.editable)return!1;let r=n.state.doc.resolve(e);if(!W.valid(r))return!1;let i=n.posAtCoords({left:t.clientX,top:t.clientY});return i&&i.inside>-1&&S.isSelectable(n.state.doc.nodeAt(i.inside))?!1:(n.dispatch(n.state.tr.setSelection(new W(r))),!0)}function Sp(n,e){if(e.inputType!="insertCompositionText"||!(n.state.selection instanceof W))return!1;let{$from:t}=n.state.selection,r=t.parent.contentMatchAt(t.index()).findWrapping(n.state.schema.nodes.text);if(!r)return!1;let i=k.empty;for(let s=r.length-1;s>=0;s--)i=k.from(r[s].createAndFill(null,i));let o=n.state.tr.replace(t.pos,t.pos,new b(i,0,0));return o.setSelection(T.near(o.doc.resolve(t.pos+1))),n.dispatch(o),!1}function Cp(n){if(!(n.selection instanceof W))return null;let e=document.createElement("div");return e.className="ProseMirror-gapcursor",X.create(n.doc,[de.widget(n.selection.head,e,{key:"gapcursor"})])}var fo={};ae(fo,{closeHistory:()=>Ap,history:()=>vp,isHistoryTransaction:()=>Bp,redo:()=>Ea,redoDepth:()=>_p,redoNoScroll:()=>Ip,undo:()=>Ma,undoDepth:()=>Pp,undoNoScroll:()=>Rp});var lr=200,K=function(){};K.prototype.append=function(e){return e.length?(e=K.from(e),!this.length&&e||e.length=t?K.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,t))};K.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)};K.prototype.forEach=function(e,t,r){t===void 0&&(t=0),r===void 0&&(r=this.length),t<=r?this.forEachInner(e,t,r,0):this.forEachInvertedInner(e,t,r,0)};K.prototype.map=function(e,t,r){t===void 0&&(t=0),r===void 0&&(r=this.length);var i=[];return this.forEach(function(o,s){return i.push(e(o,s))},t,r),i};K.from=function(e){return e instanceof K?e:e&&e.length?new xa(e):K.empty};var xa=(function(n){function e(r){n.call(this),this.values=r}n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e;var t={length:{configurable:!0},depth:{configurable:!0}};return e.prototype.flatten=function(){return this.values},e.prototype.sliceInner=function(i,o){return i==0&&o==this.length?this:new e(this.values.slice(i,o))},e.prototype.getInner=function(i){return this.values[i]},e.prototype.forEachInner=function(i,o,s,l){for(var a=o;a=s;a--)if(i(this.values[a],l+a)===!1)return!1},e.prototype.leafAppend=function(i){if(this.length+i.length<=lr)return new e(this.values.concat(i.flatten()))},e.prototype.leafPrepend=function(i){if(this.length+i.length<=lr)return new e(i.flatten().concat(this.values))},t.length.get=function(){return this.values.length},t.depth.get=function(){return 0},Object.defineProperties(e.prototype,t),e})(K);K.empty=new xa([]);var wp=(function(n){function e(t,r){n.call(this),this.left=t,this.right=r,this.length=t.length+r.length,this.depth=Math.max(t.depth,r.depth)+1}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},e.prototype.getInner=function(r){return rl&&this.right.forEachInner(r,Math.max(i-l,0),Math.min(this.length,o)-l,s+l)===!1)return!1},e.prototype.forEachInvertedInner=function(r,i,o,s){var l=this.left.length;if(i>l&&this.right.forEachInvertedInner(r,i-l,Math.max(o,l)-l,s+l)===!1||o=o?this.right.slice(r-o,i-o):this.left.slice(r,o).append(this.right.slice(0,i-o))},e.prototype.leafAppend=function(r){var i=this.right.leafAppend(r);if(i)return new e(this.left,i)},e.prototype.leafPrepend=function(r){var i=this.left.leafPrepend(r);if(i)return new e(i,this.right)},e.prototype.appendInner=function(r){return this.left.depth>=Math.max(this.right.depth,r.depth)+1?new e(this.left,new e(this.right,r)):new e(this,r)},e})(K),ao=K;var Mp=500,st=class n{constructor(e,t){this.items=e,this.eventCount=t}popEvent(e,t){if(this.eventCount==0)return null;let r=this.items.length;for(;;r--)if(this.items.get(r-1).selection){--r;break}let i,o;t&&(i=this.remapping(r,this.items.length),o=i.maps.length);let s=e.tr,l,a,c=[],d=[];return this.items.forEach((u,f)=>{if(!u.step){i||(i=this.remapping(r,f+1),o=i.maps.length),o--,d.push(u);return}if(i){d.push(new xe(u.map));let p=u.step.map(i.slice(o)),h;p&&s.maybeStep(p).doc&&(h=s.mapping.maps[s.mapping.maps.length-1],c.push(new xe(h,void 0,void 0,c.length+d.length))),o--,h&&i.appendMap(h,o)}else s.maybeStep(u.step);if(u.selection)return l=i?u.selection.map(i.slice(o)):u.selection,a=new n(this.items.slice(0,r).append(d.reverse().concat(c)),this.eventCount-1),!1},this.items.length,0),{remaining:a,transform:s,selection:l}}addTransform(e,t,r,i){let o=[],s=this.eventCount,l=this.items,a=!i&&l.length?l.get(l.length-1):null;for(let d=0;dOp&&(l=Ep(l,c),s-=c),new n(l.append(o),s)}remapping(e,t){let r=new ut;return this.items.forEach((i,o)=>{let s=i.mirrorOffset!=null&&o-i.mirrorOffset>=e?r.maps.length-i.mirrorOffset:void 0;r.appendMap(i.map,s)},e,t),r}addMaps(e){return this.eventCount==0?this:new n(this.items.append(e.map(t=>new xe(t))),this.eventCount)}rebased(e,t){if(!this.eventCount)return this;let r=[],i=Math.max(0,this.items.length-t),o=e.mapping,s=e.steps.length,l=this.eventCount;this.items.forEach(f=>{f.selection&&l--},i);let a=t;this.items.forEach(f=>{let p=o.getMirror(--a);if(p==null)return;s=Math.min(s,p);let h=o.maps[p];if(f.step){let m=e.steps[p].invert(e.docs[p]),g=f.selection&&f.selection.map(o.slice(a+1,p));g&&l++,r.push(new xe(h,m,g))}else r.push(new xe(h))},i);let c=[];for(let f=t;fMp&&(u=u.compress(this.items.length-r.length)),u}emptyItemCount(){let e=0;return this.items.forEach(t=>{t.step||e++}),e}compress(e=this.items.length){let t=this.remapping(0,e),r=t.maps.length,i=[],o=0;return this.items.forEach((s,l)=>{if(l>=e)i.push(s),s.selection&&o++;else if(s.step){let a=s.step.map(t.slice(r)),c=a&&a.getMap();if(r--,c&&t.appendMap(c,r),a){let d=s.selection&&s.selection.map(t.slice(r));d&&o++;let u=new xe(c.invert(),a,d),f,p=i.length-1;(f=i.length&&i[p].merge(u))?i[p]=f:i.push(u)}}else s.map&&r--},this.items.length,0),new n(ao.from(i.reverse()),o)}};st.empty=new st(ao.empty,0);function Ep(n,e){let t;return n.forEach((r,i)=>{if(r.selection&&e--==0)return t=i,!1}),n.slice(t)}var xe=class n{constructor(e,t,r,i){this.map=e,this.step=t,this.selection=r,this.mirrorOffset=i}merge(e){if(this.step&&e.step&&!e.selection){let t=e.step.merge(this.step);if(t)return new n(t.getMap().invert(),t,this.selection)}}},Se=class{constructor(e,t,r,i,o){this.done=e,this.undone=t,this.prevRanges=r,this.prevTime=i,this.prevComposition=o}},Op=20;function Tp(n,e,t,r){let i=t.getMeta(Ce),o;if(i)return i.historyState;t.getMeta(wa)&&(n=new Se(n.done,n.undone,null,0,-1));let s=t.getMeta("appendedTransaction");if(t.steps.length==0)return n;if(s&&s.getMeta(Ce))return s.getMeta(Ce).redo?new Se(n.done.addTransform(t,void 0,r,ar(e)),n.undone,Sa(t.mapping.maps),n.prevTime,n.prevComposition):new Se(n.done,n.undone.addTransform(t,void 0,r,ar(e)),null,n.prevTime,n.prevComposition);if(t.getMeta("addToHistory")!==!1&&!(s&&s.getMeta("addToHistory")===!1)){let l=t.getMeta("composition"),a=n.prevTime==0||!s&&n.prevComposition!=l&&(n.prevTime<(t.time||0)-r.newGroupDelay||!Np(t,n.prevRanges)),c=s?co(n.prevRanges,t.mapping):Sa(t.mapping.maps);return new Se(n.done.addTransform(t,a?e.selection.getBookmark():void 0,r,ar(e)),st.empty,c,t.time,l??n.prevComposition)}else return(o=t.getMeta("rebased"))?new Se(n.done.rebased(t,o),n.undone.rebased(t,o),co(n.prevRanges,t.mapping),n.prevTime,n.prevComposition):new Se(n.done.addMaps(t.mapping.maps),n.undone.addMaps(t.mapping.maps),co(n.prevRanges,t.mapping),n.prevTime,n.prevComposition)}function Np(n,e){if(!e)return!1;if(!n.docChanged)return!0;let t=!1;return n.mapping.maps[0].forEach((r,i)=>{for(let o=0;o=e[o]&&(t=!0)}),t}function Sa(n){let e=[];for(let t=n.length-1;t>=0&&e.length==0;t--)n[t].forEach((r,i,o,s)=>e.push(o,s));return e}function co(n,e){if(!n)return null;let t=[];for(let r=0;r{let i=Ce.getState(t);if(!i||(n?i.undone:i.done).eventCount==0)return!1;if(r){let o=Dp(i,t,n);o&&r(e?o.scrollIntoView():o)}return!0}}var Ma=cr(!1,!0),Ea=cr(!0,!0),Rp=cr(!1,!1),Ip=cr(!0,!1);function Pp(n){let e=Ce.getState(n);return e?e.done.eventCount:0}function _p(n){let e=Ce.getState(n);return e?e.undone.eventCount:0}function Bp(n){return n.getMeta(Ce)!=null}var zp={"@tiptap/core":ro,"@tiptap/pm/commands":Di,"@tiptap/pm/dropcursor":oo,"@tiptap/pm/gapcursor":lo,"@tiptap/pm/history":fo,"@tiptap/pm/keymap":pi,"@tiptap/pm/model":hi,"@tiptap/pm/schema-list":Pi,"@tiptap/pm/state":vr,"@tiptap/pm/transform":mi,"@tiptap/pm/view":di};function po(n){Object.assign(n,zp)}var fe=new Map,At=new Map,dn=So(),ho=1,mo,go=Aa;po(dn.modules);function Fp(){let n=dn.modules["@tiptap/core"];if(n==null)throw new Error("leptos-tiptap tiptap_core runtime is not initialized");return n}function Aa(n){let e=Fp().Editor;return new e(n)}function Ae(n){return{ok:!0,value:n}}function Lp(){return{kind:"empty"}}function va(){return Ae(Lp())}function we(n,e,t){return{ok:!1,error:{kind:n,message:e,operation:t}}}function Ra(n,e){return console.error(n),we("extension_unavailable",n,e)}function Oa(n){return console.error(n),we("extension_registration_failed",n)}function Vp(){return mo??globalThis.document}function Ia(n){try{n.destroy()}catch(e){console.error("Could not destroy Tiptap editor instance.",e)}}function $p(){let n=ho;return ho+=1,n}function jp(n){let e=fe.get(n);e!=null&&(e.entry!=null&&Ia(e.entry.editor),fe.delete(n))}function Wp(n,e,t,r,i){let o=fe.get(n);return o==null||o.generation!==e?(Ia(t),!1):(o.entry={editor:t,onSelection:r,commandHandlers:i.commandHandlers,selectionContributors:i.selectionContributors},!0)}function ko(n){return fe.get(n)?.entry}function Kp(n,e){let t=ko(n);return t?.editor===e?t:void 0}function Jp(n,e){let t=Kp(n,e);t!=null&&Pa(t)}function yo(n){if(At.get(n.name)!=null)throw new Error(`Tiptap extension "${n.name}" has already been registered.`);At.set(n.name,n)}function dr(n,e,t,r){let i=fe.get(n),o=i?.entry;if(i?.generation!==e||o==null){let s=`Can not execute ${t} for Tiptap instance "${n}", as no current editor is registered for this handle.`;return we("editor_unavailable",s,t)}return r(o)}function Hp(n){let e=Vp().getElementById(n);if(e!=null)return Ae(e);let t=`Can not create Tiptap instance on element with id "${n}", as the element could not be found in the DOM.`;return console.error(t),we("editor_mount_failed",t)}function qp(n){if(fe.get(n)?.entry==null)return va();let e=`Can not create Tiptap instance "${n}", as another live editor is already registered for that id.`;return console.error(e),we("duplicate_editor_id",e)}function Ta(n,e){return console.error(n,e),we("invalid_content",`${n}${e==null?"":` ${e instanceof Error?e.message:String(e)}`}`)}function ur(n){if(n.format==="html")return typeof n.value!="string"?Ta("Could not parse Tiptap HTML content."):Ae(n.value);if(typeof n.value=="string")try{return Ae(JSON.parse(n.value))}catch(e){return Ta("Could not parse Tiptap JSON content.",e)}return Ae(n.value)}function Up(n,e){return _a(za(e),()=>e==="html"?{format:e,value:n.getHTML()}:{format:e,value:n.getJSON()})}function Gp(n){let e=xo();for(let t of n.selectionContributors)Object.assign(e,t(n.editor));return Object.assign(e,Yp(n.editor)),e}function Yp(n){let e=n.state.selection,t=e.from,r=e.to,i=e.empty,o=null,s=null,l=null;return n.state.doc.forEach((a,c,d)=>{if(o!=null)return;let u=c+1,f=c+a.nodeSize-1;t>=u&&t<=f&&(o=d,s=u,l=f)}),{current_block_index:o,current_block_from:s,current_block_to:l,selection_from:t,selection_to:r,selection_empty:i}}function cn(n,e){return(n??null)===(e??null)}function Xp(n,e){return(n??null)===(e??null)}function Zp(n,e){let t=new Set(["current_block_index","current_block_from","current_block_to","selection_from","selection_to","selection_empty"]),r=new Set([...Object.keys(n),...Object.keys(e)].filter(i=>!t.has(i)));for(let i of r)if((n[i]??!1)!==(e[i]??!1))return!1;return cn(n.current_block_index,e.current_block_index)&&cn(n.current_block_from,e.current_block_from)&&cn(n.current_block_to,e.current_block_to)&&cn(n.selection_from,e.selection_from)&&cn(n.selection_to,e.selection_to)&&Xp(n.selection_empty,e.selection_empty)}function Pa(n,e={}){let t=Gp(n);e.force!==!0&&n.lastSelectionState!=null&&Zp(n.lastSelectionState,t)||(n.lastSelectionState=t,n.onSelection(t))}function _a(n,e){try{return Ae(e())}catch(t){let r=`${n} failed: ${t instanceof Error?t.message:String(t)}`;return console.error(r,t),we("operation_failed",r,n)}}function C(n,e){try{return e()===!1?we("command_rejected",`Tiptap rejected the ${n} command for the current editor state.`,n):va()}catch(t){let r=`${n} failed: ${t instanceof Error?t.message:String(t)}`;return console.error(r,t),we("operation_failed",r,n)}}function Ba(n){return n==null?{}:{preserveWhitespace:n.preserve_whitespace,from:n.from,to:n.to}}function Qp(n){return{scrollIntoView:n?.scroll_into_view}}function Na(n){return{parseOptions:Ba(n?.parse_options),updateSelection:n?.update_selection,applyInputRules:n?.apply_input_rules,applyPasteRules:n?.apply_paste_rules,errorOnInvalidContent:n?.error_on_invalid_content}}function Da(n){return{extendEmptyMarkRange:n?.extend_empty_mark_range}}function eh(n,e){switch(e.kind){case"blur":return C(e.kind,()=>n.commands.blur());case"clear_content":return C(e.kind,()=>n.commands.clearContent(e.emit_update));case"clear_nodes":return C(e.kind,()=>n.commands.clearNodes());case"create_paragraph_near":return C(e.kind,()=>n.commands.createParagraphNear());case"cut":return C(e.kind,()=>n.commands.cut(e.range,e.target_pos));case"delete_current_node":return C(e.kind,()=>n.commands.deleteCurrentNode());case"delete_node":return C(e.kind,()=>n.commands.deleteNode(e.type_or_name));case"delete_range":return C(e.kind,()=>n.commands.deleteRange(e.range));case"delete_selection":return C(e.kind,()=>n.commands.deleteSelection());case"enter":return C(e.kind,()=>n.commands.enter());case"exit_code":return C(e.kind,()=>n.commands.exitCode());case"extend_mark_range":return C(e.kind,()=>n.commands.extendMarkRange(e.type_or_name,e.attributes??void 0));case"focus":return C(e.kind,()=>n.commands.focus(e.target??null,Qp(e.options)));case"insert_content":{let t=ur(e.content);if(!t.ok)return t;let{from:r,to:i}=n.state.selection;return C(e.kind,()=>n.commands.insertContentAt({from:r,to:i},t.value,Na(e.options)))}case"insert_content_at":{let t=ur(e.content);return t.ok?C(e.kind,()=>n.commands.insertContentAt(e.position,t.value,Na(e.options))):t}case"join_up":return C(e.kind,()=>n.commands.joinUp());case"join_down":return C(e.kind,()=>n.commands.joinDown());case"join_backward":return C(e.kind,()=>n.commands.joinBackward());case"join_forward":return C(e.kind,()=>n.commands.joinForward());case"join_item_backward":return C(e.kind,()=>n.commands.joinItemBackward());case"join_item_forward":return C(e.kind,()=>n.commands.joinItemForward());case"join_textblock_backward":return C(e.kind,()=>n.commands.joinTextblockBackward());case"join_textblock_forward":return C(e.kind,()=>n.commands.joinTextblockForward());case"keyboard_shortcut":return C(e.kind,()=>n.commands.keyboardShortcut(e.name));case"lift":return C(e.kind,()=>n.commands.lift(e.type_or_name,e.attributes??void 0));case"lift_empty_block":return C(e.kind,()=>n.commands.liftEmptyBlock());case"newline_in_code":return C(e.kind,()=>n.commands.newlineInCode());case"reset_attributes":return C(e.kind,()=>n.commands.resetAttributes(e.type_or_name,e.attribute_names));case"scroll_into_view":return C(e.kind,()=>n.commands.scrollIntoView());case"select_all":return C(e.kind,()=>n.commands.selectAll());case"select_node_backward":return C(e.kind,()=>n.commands.selectNodeBackward());case"select_node_forward":return C(e.kind,()=>n.commands.selectNodeForward());case"select_parent_node":return C(e.kind,()=>n.commands.selectParentNode());case"select_textblock_end":return C(e.kind,()=>n.commands.selectTextblockEnd());case"select_textblock_start":return C(e.kind,()=>n.commands.selectTextblockStart());case"set_mark":return C(e.kind,()=>n.commands.setMark(e.type_or_name,e.attributes??void 0));case"set_meta":return C(e.kind,()=>n.commands.setMeta(e.key,e.value));case"set_node":return C(e.kind,()=>n.commands.setNode(e.type_or_name,e.attributes??void 0));case"set_node_selection":return C(e.kind,()=>n.commands.setNodeSelection(e.position));case"set_text_selection":return C(e.kind,()=>n.commands.setTextSelection(e.position));case"split_block":return C(e.kind,()=>n.commands.splitBlock({keepMarks:e.keep_marks}));case"toggle_list":return C(e.kind,()=>n.commands.toggleList(e.list_type_or_name,e.item_type_or_name,e.keep_marks,e.attributes??void 0));case"toggle_mark":return C(e.kind,()=>n.commands.toggleMark(e.type_or_name,e.attributes??void 0,Da(e.options)));case"toggle_node":return C(e.kind,()=>n.commands.toggleNode(e.type_or_name,e.toggle_type_or_name,e.attributes??void 0));case"toggle_wrap":return C(e.kind,()=>n.commands.toggleWrap(e.type_or_name,e.attributes??void 0));case"undo_input_rule":return C(e.kind,()=>n.commands.undoInputRule());case"unset_all_marks":return C(e.kind,()=>n.commands.unsetAllMarks());case"unset_mark":return C(e.kind,()=>n.commands.unsetMark(e.type_or_name,Da(e.options)));case"update_attributes":return C(e.kind,()=>n.commands.updateAttributes(e.type_or_name,e.attributes));case"wrap_in":return C(e.kind,()=>n.commands.wrapIn(e.type_or_name,e.attributes??void 0));case"wrap_in_list":return C(e.kind,()=>n.commands.wrapInList(e.type_or_name,e.attributes??void 0));default:return}}function za(n){return n==="html"?"get_content_html":"get_content_json"}function th(n){let e=[];for(let t of n){let r=At.get(t);if(r==null)return Ra(`Can not create Tiptap instance, as extension "${t}" is not registered.`);e.push({descriptor:r,selectionKeys:r.selection_keys??[]})}return Ae(e)}function nh(n,e){let t=th(n);if(!t.ok)return t;let r=new Map,i=[],o=[],s=new Set;for(let{descriptor:l,selectionKeys:a}of t.value){let c;try{c=l.create(e)}catch(d){let u=`Can not create Tiptap instance, as extension "${l.name}" failed to initialize.`;return console.error(u,d),we("extension_registration_failed",`${u} ${d instanceof Error?d.message:String(d)}`)}Array.isArray(c)?o.push(...c):o.push(c);for(let d of a){if(s.has(d))return Oa(`Can not create Tiptap instance, as multiple selected extensions contribute selection key "${d}".`);s.add(d)}l.selection_state!=null&&i.push(l.selection_state);for(let[d,u]of Object.entries(l.commands??{}))if(u!=null){if(r.has(d))return Oa(`Can not create Tiptap instance, as multiple selected extensions handle command "${d}".`);r.set(d,u)}}return Ae({extensions:o,commandHandlers:r,selectionContributors:i})}function cm(){dn.registerExtension=yo}function dm(n,e,t,r,i){let o=qp(n.id);if(!o.ok){i(o.error);return}let s=Hp(n.id);if(!s.ok){i(s.error);return}let l=nh(n.extensions,{placeholder:n.placeholder});if(!l.ok){i(l.error);return}let a=ur(n.content);if(!a.ok){i(a.error);return}let c=$p();fe.set(n.id,{generation:c});let d=_a("create_editor",()=>go({element:s.value,editable:n.editable,extensions:l.value.extensions,injectCSS:!1,content:a.value,onUpdate:({editor:f})=>{t()},onSelectionUpdate:({editor:f})=>{Jp(n.id,f)}}));if(!d.ok){let f=fe.get(n.id);f?.generation===c&&f.entry==null&&fe.delete(n.id),i(d.error);return}if(!Wp(n.id,c,d.value,r,l.value))return;let u=ko(n.id);u!=null?(e({generation:c}),Pa(u,{force:!0})):e({generation:c})}function um(n){jp(n)}function fm(n){let{id:e,generation:t,command:r}=n;return r.kind==="set_editable"?dr(e,t,r.kind,({editor:i})=>C(r.kind,()=>{i.setEditable(r.editable)})):dr(e,t,r.kind,i=>{let o=eh(i.editor,r);if(o!=null)return o;let s=r,l=i.commandHandlers.get(s.kind);return l==null?Ra(`Can not execute ${s.kind} for Tiptap instance "${e}", as no active extension provides this command.`,s.kind):C(s.kind,()=>l(i.editor,s))})}function pm(n){let{id:e,generation:t,request:r}=n;switch(r.kind){case"get_content":return dr(e,t,za(r.format),({editor:i})=>{let o=Up(i,r.format);return o.ok?Ae({kind:"content",content:o.value}):o});case"set_content":return dr(e,t,r.kind,i=>{let o=ur(r.content);return o.ok?C(r.kind,()=>i.editor.commands.setContent(o.value,r.options?.emit_update??!1,Ba(r.options?.parse_options),{errorOnInvalidContent:r.options?.error_on_invalid_content})):o})}}var hm={getEditorEntry:ko,getRegisteredExtensionNames(){return[...At.keys()]},hasRegisteredExtension(n){return At.has(n)},registerExtension:yo,reset(){fe.clear(),At.clear(),po(dn.modules),dn.registerExtension=yo,mo=void 0,go=Aa,ho=1},getSlotCount(){return fe.size},setDocument(n){mo=n},setEditorFactory(n){go=n}};export{hm as __testing,fm as command,dm as create,um as destroy,pm as document,cm as init_bridge_runtime}; +`,textSerializers:r={}}=e||{};return Ei(this.state.doc,{blockSeparator:t,textSerializers:{...br(this.schema),...r}})}get isEmpty(){return Sr(this.state.doc)}getCharacterCount(){return console.warn('[tiptap warn]: "editor.getCharacterCount()" is deprecated. Please use "editor.storage.characterCount.characters()" instead.'),this.state.doc.content.size-2}destroy(){if(this.emit("destroy"),this.view){let e=this.view.dom;e&&e.editor&&delete e.editor,this.view.destroy()}this.removeAllListeners()}get isDestroyed(){var e;return!(!((e=this.view)===null||e===void 0)&&e.docView)}$node(e,t){var r;return((r=this.$doc)===null||r===void 0?void 0:r.querySelector(e,t))||null}$nodes(e,t){var r;return((r=this.$doc)===null||r===void 0?void 0:r.querySelectorAll(e,t))||null}$pos(e){let t=this.state.doc.resolve(e);return new gr(t,this)}get $doc(){return this.$pos(0)}};function kh(n){return new Ze({find:n.find,handler:({state:e,range:t,match:r})=>{let o=N(n.getAttributes,void 0,r);if(o===!1||o===null)return null;let{tr:i}=e,s=r[r.length-1],l=r[0];if(s){let a=l.search(/\S/),c=t.from+l.indexOf(s),d=c+s.length;if(Oi(t.from,t.to,e.doc).filter(p=>p.mark.type.excluded.find(m=>m===n.type&&m!==p.mark.type)).filter(p=>p.to>c).length)return null;dt.from&&i.delete(t.from+a,c);let u=t.from+a+s.length;i.addMark(t.from+a,u,n.type.create(o||{})),i.removeStoredMark(n.type)}}})}function xh(n){return new Ze({find:n.find,handler:({state:e,range:t,match:r})=>{let o=N(n.getAttributes,void 0,r)||{},{tr:i}=e,s=t.from,l=t.to,a=n.type.create(o);if(r[1]){let c=r[0].lastIndexOf(r[1]),d=s+c;d>l?d=l:l=d+r[1].length;let f=r[0][r[0].length-1];i.insertText(f,s+r[0].length-1),i.replaceWith(d,l,a)}else if(r[0]){let c=n.type.isInline?s:s-1;i.insert(c,n.type.create(o)).delete(i.mapping.map(s),i.mapping.map(l))}i.scrollIntoView()}})}function Sh(n){return new Ze({find:n.find,handler:({state:e,range:t,match:r})=>{let o=e.doc.resolve(t.from),i=N(n.getAttributes,void 0,r)||{};if(!o.node(-1).canReplaceWith(o.index(-1),o.indexAfter(-1),n.type))return null;e.tr.delete(t.from,t.to).setBlockType(t.from,t.from,n.type,i)}})}function wh(n){return new Ze({find:n.find,handler:({state:e,range:t,match:r})=>{let o=n.replace,i=t.from,s=t.to;if(r[1]){let l=r[0].lastIndexOf(r[1]);o+=r[0].slice(l+r[1].length),i+=l;let a=i-s;a>0&&(o=r[0].slice(l-a,l)+o,i=s)}e.tr.insertText(o,i,s)}})}function Ch(n){return new Ze({find:n.find,handler:({state:e,range:t,match:r,chain:o})=>{let i=N(n.getAttributes,void 0,r)||{},s=e.tr.delete(t.from,t.to),a=s.doc.resolve(t.from).blockRange(),c=a&&ot(a,n.type,i);if(!c)return null;if(s.wrap(a,c),n.keepMarks&&n.editor){let{selection:f,storedMarks:u}=e,{splittableMarks:p}=n.editor.extensionManager,h=u||f.$to.parentOffset&&f.$from.marks();if(h){let m=h.filter(g=>p.includes(g.type.name));s.ensureMarks(m)}}if(n.keepAttributes){let f=n.type.name==="bulletList"||n.type.name==="orderedList"?"listItem":"taskList";o().updateAttributes(f,i).run()}let d=s.doc.resolve(t.from-1).nodeBefore;d&&d.type===n.type&&ae(s.doc,t.from-1)&&(!n.joinPredicate||n.joinPredicate(r,d))&&s.join(t.from-1)}})}var hi=class n{constructor(e={}){this.type="node",this.name="node",this.parent=null,this.child=null,this.config={name:this.name,defaultOptions:{}},this.config={...this.config,...e},this.name=this.config.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${this.name}".`),this.options=this.config.defaultOptions,this.config.addOptions&&(this.options=N(x(this,"addOptions",{name:this.name}))),this.storage=N(x(this,"addStorage",{name:this.name,options:this.options}))||{}}static create(e={}){return new n(e)}configure(e={}){let t=this.extend({...this.config,addOptions:()=>kn(this.options,e)});return t.name=this.name,t.parent=this.parent,t}extend(e={}){let t=new n(e);return t.parent=this,this.child=t,t.name=e.name?e.name:t.parent.name,e.defaultOptions&&Object.keys(e.defaultOptions).length>0&&console.warn(`[tiptap warn]: BREAKING CHANGE: "defaultOptions" is deprecated. Please use "addOptions" instead. Found in extension: "${t.name}".`),t.options=N(x(t,"addOptions",{name:t.name})),t.storage=N(x(t,"addStorage",{name:t.name,options:t.options})),t}},mi=class{constructor(e,t,r){this.isDragging=!1,this.component=e,this.editor=t.editor,this.options={stopEvent:null,ignoreMutation:null,...r},this.extension=t.extension,this.node=t.node,this.decorations=t.decorations,this.innerDecorations=t.innerDecorations,this.view=t.view,this.HTMLAttributes=t.HTMLAttributes,this.getPos=t.getPos,this.mount()}mount(){}get dom(){return this.editor.view.dom}get contentDOM(){return null}onDragStart(e){var t,r,o,i,s,l,a;let{view:c}=this.editor,d=e.target,f=d.nodeType===3?(t=d.parentElement)===null||t===void 0?void 0:t.closest("[data-drag-handle]"):d.closest("[data-drag-handle]");if(!this.dom||!((r=this.contentDOM)===null||r===void 0)&&r.contains(d)||!f)return;let u=0,p=0;if(this.dom!==f){let S=this.dom.getBoundingClientRect(),M=f.getBoundingClientRect(),v=(o=e.offsetX)!==null&&o!==void 0?o:(i=e.nativeEvent)===null||i===void 0?void 0:i.offsetX,A=(s=e.offsetY)!==null&&s!==void 0?s:(l=e.nativeEvent)===null||l===void 0?void 0:l.offsetY;u=M.x-S.x+v,p=M.y-S.y+A}let h=this.dom.cloneNode(!0);(a=e.dataTransfer)===null||a===void 0||a.setDragImage(h,u,p);let m=this.getPos();if(typeof m!="number")return;let g=w.create(c.state.doc,m),y=c.state.tr.setSelection(g);c.dispatch(y)}stopEvent(e){var t;if(!this.dom)return!1;if(typeof this.options.stopEvent=="function")return this.options.stopEvent({event:e});let r=e.target;if(!(this.dom.contains(r)&&!(!((t=this.contentDOM)===null||t===void 0)&&t.contains(r))))return!1;let i=e.type.startsWith("drag"),s=e.type==="drop";if((["INPUT","BUTTON","SELECT","TEXTAREA"].includes(r.tagName)||r.isContentEditable)&&!s&&!i)return!0;let{isEditable:a}=this.editor,{isDragging:c}=this,d=!!this.node.type.spec.draggable,f=w.isSelectable(this.node),u=e.type==="copy",p=e.type==="paste",h=e.type==="cut",m=e.type==="mousedown";if(!d&&f&&i&&e.target===this.dom&&e.preventDefault(),d&&i&&!c&&e.target===this.dom)return e.preventDefault(),!1;if(d&&a&&!c&&m){let g=r.closest("[data-drag-handle]");g&&(this.dom===g||this.dom.contains(g))&&(this.isDragging=!0,document.addEventListener("dragend",()=>{this.isDragging=!1},{once:!0}),document.addEventListener("drop",()=>{this.isDragging=!1},{once:!0}),document.addEventListener("mouseup",()=>{this.isDragging=!1},{once:!0}))}return!(c||s||u||p||h||m&&f)}ignoreMutation(e){return!this.dom||!this.contentDOM?!0:typeof this.options.ignoreMutation=="function"?this.options.ignoreMutation({mutation:e}):this.node.isLeaf||this.node.isAtom?!0:e.type==="selection"||this.dom.contains(e.target)&&e.type==="childList"&&(Ft()||di())&&this.editor.isFocused&&[...Array.from(e.addedNodes),...Array.from(e.removedNodes)].every(r=>r.isContentEditable)?!1:this.contentDOM===e.target&&e.type==="attributes"?!0:!this.contentDOM.contains(e.target)}updateAttributes(e){this.editor.commands.command(({tr:t})=>{let r=this.getPos();return typeof r!="number"?!1:(t.setNodeMarkup(r,void 0,{...this.node.attrs,...e}),!0)})}deleteNode(){let e=this.getPos();if(typeof e!="number")return;let t=e+this.node.nodeSize;this.editor.commands.deleteRange({from:e,to:t})}};function Mh(n){return new zt({find:n.find,handler:({state:e,range:t,match:r,pasteEvent:o})=>{let i=N(n.getAttributes,void 0,r,o);if(i===!1||i===null)return null;let{tr:s}=e,l=r[r.length-1],a=r[0],c=t.to;if(l){let d=a.search(/\S/),f=t.from+a.indexOf(l),u=f+l.length;if(Oi(t.from,t.to,e.doc).filter(h=>h.mark.type.excluded.find(g=>g===n.type&&g!==h.mark.type)).filter(h=>h.to>f).length)return null;ut.from&&s.delete(t.from+d,f),c=t.from+d+l.length,s.addMark(t.from+d,c,n.type.create(i||{})),s.removeStoredMark(n.type)}}})}function Eh(n,e){let{selection:t}=n,{$from:r}=t;if(t instanceof w){let i=r.index();return r.parent.canReplaceWith(i,i+1,e)}let o=r.depth;for(;o>=0;){let i=r.index(o);if(r.node(o).contentMatchAt(i).matchType(e))return!0;o-=1}return!1}function Oh(n){return n.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}function Th(n){return typeof n=="string"}function Nh(n){return new zt({find:n.find,handler({match:e,chain:t,range:r,pasteEvent:o}){let i=N(n.getAttributes,void 0,e,o),s=N(n.getContent,void 0,i);if(i===!1||i===null)return null;let l={type:n.type.name,attrs:i};s&&(l.content=s),e.input&&t().deleteRange(r).insertContentAt(r.from,l)}})}function Ah(n){return new zt({find:n.find,handler:({state:e,range:t,match:r})=>{let o=n.replace,i=t.from,s=t.to;if(r[1]){let l=r[0].lastIndexOf(r[1]);o+=r[0].slice(l+r[1].length),i+=l;let a=i-s;a>0&&(o=r[0].slice(l-a,l)+o,i=s)}e.tr.insertText(o,i,s)}})}var gi=class{constructor(e){this.transaction=e,this.currentStep=this.transaction.steps.length}map(e){let t=!1;return{position:this.transaction.steps.slice(this.currentStep).reduce((o,i)=>{let s=i.getMap().mapResult(o);return s.deleted&&(t=!0),s.pos},e),deleted:t}}};var Ai={};ce(Ai,{dropCursor:()=>vh});function vh(n={}){return new B({view(e){return new Ni(e,n)}})}var Ni=class{constructor(e,t){var r;this.editorView=e,this.cursorPos=null,this.element=null,this.timeout=-1,this.width=(r=t.width)!==null&&r!==void 0?r:1,this.color=t.color===!1?void 0:t.color||"black",this.class=t.class,this.handlers=["dragover","dragend","drop","dragleave"].map(o=>{let i=s=>{this[o](s)};return e.dom.addEventListener(o,i),{name:o,handler:i}})}destroy(){this.handlers.forEach(({name:e,handler:t})=>this.editorView.dom.removeEventListener(e,t))}update(e,t){this.cursorPos!=null&&t.doc!=e.state.doc&&(this.cursorPos>e.state.doc.content.size?this.setCursor(null):this.updateOverlay())}setCursor(e){e!=this.cursorPos&&(this.cursorPos=e,e==null?(this.element.parentNode.removeChild(this.element),this.element=null):this.updateOverlay())}updateOverlay(){let e=this.editorView.state.doc.resolve(this.cursorPos),t=!e.parent.inlineContent,r,o=this.editorView.dom,i=o.getBoundingClientRect(),s=i.width/o.offsetWidth,l=i.height/o.offsetHeight;if(t){let f=e.nodeBefore,u=e.nodeAfter;if(f||u){let p=this.editorView.nodeDOM(this.cursorPos-(f?f.nodeSize:0));if(p){let h=p.getBoundingClientRect(),m=f?h.bottom:h.top;f&&u&&(m=(m+this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top)/2);let g=this.width/2*l;r={left:h.left,right:h.right,top:m-g,bottom:m+g}}}}if(!r){let f=this.editorView.coordsAtPos(this.cursorPos),u=this.width/2*s;r={left:f.left-u,right:f.left+u,top:f.top,bottom:f.bottom}}let a=this.editorView.dom.offsetParent;this.element||(this.element=a.appendChild(document.createElement("div")),this.class&&(this.element.className=this.class),this.element.style.cssText="position: absolute; z-index: 50; pointer-events: none;",this.color&&(this.element.style.backgroundColor=this.color)),this.element.classList.toggle("prosemirror-dropcursor-block",t),this.element.classList.toggle("prosemirror-dropcursor-inline",!t);let c,d;if(!a||a==document.body&&getComputedStyle(a).position=="static")c=-pageXOffset,d=-pageYOffset;else{let f=a.getBoundingClientRect(),u=f.width/a.offsetWidth,p=f.height/a.offsetHeight;c=f.left-a.scrollLeft*u,d=f.top-a.scrollTop*p}this.element.style.left=(r.left-c)/s+"px",this.element.style.top=(r.top-d)/l+"px",this.element.style.width=(r.right-r.left)/s+"px",this.element.style.height=(r.bottom-r.top)/l+"px"}scheduleRemoval(e){clearTimeout(this.timeout),this.timeout=setTimeout(()=>this.setCursor(null),e)}dragover(e){if(!this.editorView.editable)return;let t=this.editorView.posAtCoords({left:e.clientX,top:e.clientY}),r=t&&t.inside>=0&&this.editorView.state.doc.nodeAt(t.inside),o=r&&r.type.spec.disableDropCursor,i=typeof o=="function"?o(this.editorView,t,e):o;if(t&&!i){let s=t.pos;if(this.editorView.dragging&&this.editorView.dragging.slice){let l=Qt(this.editorView.state.doc,s,this.editorView.dragging.slice);l!=null&&(s=l)}this.setCursor(s),this.scheduleRemoval(5e3)}}dragend(){this.scheduleRemoval(20)}drop(){this.scheduleRemoval(20)}dragleave(e){this.editorView.dom.contains(e.relatedTarget)||this.setCursor(null)}};var Di={};ce(Di,{GapCursor:()=>q,gapCursor:()=>Ih});var q=class n extends C{constructor(e){super(e,e)}map(e,t){let r=e.resolve(t.map(this.head));return n.valid(r)?new n(r):C.near(r)}content(){return k.empty}eq(e){return e instanceof n&&e.head==this.head}toJSON(){return{type:"gapcursor",pos:this.head}}static fromJSON(e,t){if(typeof t.pos!="number")throw new RangeError("Invalid input for GapCursor.fromJSON");return new n(e.resolve(t.pos))}getBookmark(){return new vi(this.anchor)}static valid(e){let t=e.parent;if(t.inlineContent||!Dh(e)||!Rh(e))return!1;let r=t.type.spec.allowGapCursor;if(r!=null)return r;let o=t.contentMatchAt(e.index()).defaultType;return o&&o.isTextblock}static findGapCursorFrom(e,t,r=!1){e:for(;;){if(!r&&n.valid(e))return e;let o=e.pos,i=null;for(let s=e.depth;;s--){let l=e.node(s);if(t>0?e.indexAfter(s)0){i=l.child(t>0?e.indexAfter(s):e.index(s)-1);break}else if(s==0)return null;o+=t;let a=e.doc.resolve(o);if(n.valid(a))return a}for(;;){let s=t>0?i.firstChild:i.lastChild;if(!s){if(i.isAtom&&!i.isText&&!w.isSelectable(i)){e=e.doc.resolve(o+i.nodeSize*t),r=!1;continue e}break}i=s,o+=t;let l=e.doc.resolve(o);if(n.valid(l))return l}return null}}};q.prototype.visible=!1;q.findFrom=q.findGapCursorFrom;C.jsonID("gapcursor",q);var vi=class n{constructor(e){this.pos=e}map(e){return new n(e.map(this.pos))}resolve(e){let t=e.resolve(this.pos);return q.valid(t)?new q(t):C.near(t)}};function ec(n){return n.isAtom||n.spec.isolating||n.spec.createGapCursor}function Dh(n){for(let e=n.depth;e>=0;e--){let t=n.index(e),r=n.node(e);if(t==0){if(r.type.spec.isolating)return!0;continue}for(let o=r.child(t-1);;o=o.lastChild){if(o.childCount==0&&!o.inlineContent||ec(o.type))return!0;if(o.inlineContent)return!1}}return!0}function Rh(n){for(let e=n.depth;e>=0;e--){let t=n.indexAfter(e),r=n.node(e);if(t==r.childCount){if(r.type.spec.isolating)return!0;continue}for(let o=r.child(t);;o=o.firstChild){if(o.childCount==0&&!o.inlineContent||ec(o.type))return!0;if(o.inlineContent)return!1}}return!0}function Ih(){return new B({props:{decorations:zh,createSelectionBetween(n,e,t){return e.pos==t.pos&&q.valid(t)?new q(t):null},handleClick:Ph,handleKeyDown:_h,handleDOMEvents:{beforeinput:Bh}}})}var _h=_t({ArrowLeft:wr("horiz",-1),ArrowRight:wr("horiz",1),ArrowUp:wr("vert",-1),ArrowDown:wr("vert",1)});function wr(n,e){let t=n=="vert"?e>0?"down":"up":e>0?"right":"left";return function(r,o,i){let s=r.selection,l=e>0?s.$to:s.$from,a=s.empty;if(s instanceof O){if(!i.endOfTextblock(t)||l.depth==0)return!1;a=!1,l=r.doc.resolve(e>0?l.after():l.before())}let c=q.findGapCursorFrom(l,e,a);return c?(o&&o(r.tr.setSelection(new q(c))),!0):!1}}function Ph(n,e,t){if(!n||!n.editable)return!1;let r=n.state.doc.resolve(e);if(!q.valid(r))return!1;let o=n.posAtCoords({left:t.clientX,top:t.clientY});return o&&o.inside>-1&&w.isSelectable(n.state.doc.nodeAt(o.inside))?!1:(n.dispatch(n.state.tr.setSelection(new q(r))),!0)}function Bh(n,e){if(e.inputType!="insertCompositionText"||!(n.state.selection instanceof q))return!1;let{$from:t}=n.state.selection,r=t.parent.contentMatchAt(t.index()).findWrapping(n.state.schema.nodes.text);if(!r)return!1;let o=b.empty;for(let s=r.length-1;s>=0;s--)o=b.from(r[s].createAndFill(null,o));let i=n.state.tr.replace(t.pos,t.pos,new k(o,0,0));return i.setSelection(O.near(i.doc.resolve(t.pos+1))),n.dispatch(i),!1}function zh(n){if(!(n.selection instanceof q))return null;let e=document.createElement("div");return e.className="ProseMirror-gapcursor",$.create(n.doc,[oe.widget(n.selection.head,e,{key:"gapcursor"})])}var Pi={};ce(Pi,{closeHistory:()=>Hh,history:()=>Jh,isHistoryTransaction:()=>Xh,redo:()=>sc,redoDepth:()=>Yh,redoNoScroll:()=>Uh,undo:()=>ic,undoDepth:()=>Gh,undoNoScroll:()=>qh});var Cr=200,U=function(){};U.prototype.append=function(e){return e.length?(e=U.from(e),!this.length&&e||e.length=t?U.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,t))};U.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)};U.prototype.forEach=function(e,t,r){t===void 0&&(t=0),r===void 0&&(r=this.length),t<=r?this.forEachInner(e,t,r,0):this.forEachInvertedInner(e,t,r,0)};U.prototype.map=function(e,t,r){t===void 0&&(t=0),r===void 0&&(r=this.length);var o=[];return this.forEach(function(i,s){return o.push(e(i,s))},t,r),o};U.from=function(e){return e instanceof U?e:e&&e.length?new tc(e):U.empty};var tc=(function(n){function e(r){n.call(this),this.values=r}n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e;var t={length:{configurable:!0},depth:{configurable:!0}};return e.prototype.flatten=function(){return this.values},e.prototype.sliceInner=function(o,i){return o==0&&i==this.length?this:new e(this.values.slice(o,i))},e.prototype.getInner=function(o){return this.values[o]},e.prototype.forEachInner=function(o,i,s,l){for(var a=i;a=s;a--)if(o(this.values[a],l+a)===!1)return!1},e.prototype.leafAppend=function(o){if(this.length+o.length<=Cr)return new e(this.values.concat(o.flatten()))},e.prototype.leafPrepend=function(o){if(this.length+o.length<=Cr)return new e(o.flatten().concat(this.values))},t.length.get=function(){return this.values.length},t.depth.get=function(){return 0},Object.defineProperties(e.prototype,t),e})(U);U.empty=new tc([]);var Fh=(function(n){function e(t,r){n.call(this),this.left=t,this.right=r,this.length=t.length+r.length,this.depth=Math.max(t.depth,r.depth)+1}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},e.prototype.getInner=function(r){return rl&&this.right.forEachInner(r,Math.max(o-l,0),Math.min(this.length,i)-l,s+l)===!1)return!1},e.prototype.forEachInvertedInner=function(r,o,i,s){var l=this.left.length;if(o>l&&this.right.forEachInvertedInner(r,o-l,Math.max(i,l)-l,s+l)===!1||i=i?this.right.slice(r-i,o-i):this.left.slice(r,i).append(this.right.slice(0,o-i))},e.prototype.leafAppend=function(r){var o=this.right.leafAppend(r);if(o)return new e(this.left,o)},e.prototype.leafPrepend=function(r){var o=this.left.leafPrepend(r);if(o)return new e(o,this.right)},e.prototype.appendInner=function(r){return this.left.depth>=Math.max(this.right.depth,r.depth)+1?new e(this.left,new e(this.right,r)):new e(this,r)},e})(U),Ri=U;var Lh=500,gt=class n{constructor(e,t){this.items=e,this.eventCount=t}popEvent(e,t){if(this.eventCount==0)return null;let r=this.items.length;for(;;r--)if(this.items.get(r-1).selection){--r;break}let o,i;t&&(o=this.remapping(r,this.items.length),i=o.maps.length);let s=e.tr,l,a,c=[],d=[];return this.items.forEach((f,u)=>{if(!f.step){o||(o=this.remapping(r,u+1),i=o.maps.length),i--,d.push(f);return}if(o){d.push(new Oe(f.map));let p=f.step.map(o.slice(i)),h;p&&s.maybeStep(p).doc&&(h=s.mapping.maps[s.mapping.maps.length-1],c.push(new Oe(h,void 0,void 0,c.length+d.length))),i--,h&&o.appendMap(h,i)}else s.maybeStep(f.step);if(f.selection)return l=o?f.selection.map(o.slice(i)):f.selection,a=new n(this.items.slice(0,r).append(d.reverse().concat(c)),this.eventCount-1),!1},this.items.length,0),{remaining:a,transform:s,selection:l}}addTransform(e,t,r,o){let i=[],s=this.eventCount,l=this.items,a=!o&&l.length?l.get(l.length-1):null;for(let d=0;dVh&&(l=$h(l,c),s-=c),new n(l.append(i),s)}remapping(e,t){let r=new St;return this.items.forEach((o,i)=>{let s=o.mirrorOffset!=null&&i-o.mirrorOffset>=e?r.maps.length-o.mirrorOffset:void 0;r.appendMap(o.map,s)},e,t),r}addMaps(e){return this.eventCount==0?this:new n(this.items.append(e.map(t=>new Oe(t))),this.eventCount)}rebased(e,t){if(!this.eventCount)return this;let r=[],o=Math.max(0,this.items.length-t),i=e.mapping,s=e.steps.length,l=this.eventCount;this.items.forEach(u=>{u.selection&&l--},o);let a=t;this.items.forEach(u=>{let p=i.getMirror(--a);if(p==null)return;s=Math.min(s,p);let h=i.maps[p];if(u.step){let m=e.steps[p].invert(e.docs[p]),g=u.selection&&u.selection.map(i.slice(a+1,p));g&&l++,r.push(new Oe(h,m,g))}else r.push(new Oe(h))},o);let c=[];for(let u=t;uLh&&(f=f.compress(this.items.length-r.length)),f}emptyItemCount(){let e=0;return this.items.forEach(t=>{t.step||e++}),e}compress(e=this.items.length){let t=this.remapping(0,e),r=t.maps.length,o=[],i=0;return this.items.forEach((s,l)=>{if(l>=e)o.push(s),s.selection&&i++;else if(s.step){let a=s.step.map(t.slice(r)),c=a&&a.getMap();if(r--,c&&t.appendMap(c,r),a){let d=s.selection&&s.selection.map(t.slice(r));d&&i++;let f=new Oe(c.invert(),a,d),u,p=o.length-1;(u=o.length&&o[p].merge(f))?o[p]=u:o.push(f)}}else s.map&&r--},this.items.length,0),new n(Ri.from(o.reverse()),i)}};gt.empty=new gt(Ri.empty,0);function $h(n,e){let t;return n.forEach((r,o)=>{if(r.selection&&e--==0)return t=o,!1}),n.slice(t)}var Oe=class n{constructor(e,t,r,o){this.map=e,this.step=t,this.selection=r,this.mirrorOffset=o}merge(e){if(this.step&&e.step&&!e.selection){let t=e.step.merge(this.step);if(t)return new n(t.getMap().invert(),t,this.selection)}}},Te=class{constructor(e,t,r,o,i){this.done=e,this.undone=t,this.prevRanges=r,this.prevTime=o,this.prevComposition=i}},Vh=20;function jh(n,e,t,r){let o=t.getMeta(Ne),i;if(o)return o.historyState;t.getMeta(oc)&&(n=new Te(n.done,n.undone,null,0,-1));let s=t.getMeta("appendedTransaction");if(t.steps.length==0)return n;if(s&&s.getMeta(Ne))return s.getMeta(Ne).redo?new Te(n.done.addTransform(t,void 0,r,Mr(e)),n.undone,nc(t.mapping.maps),n.prevTime,n.prevComposition):new Te(n.done,n.undone.addTransform(t,void 0,r,Mr(e)),null,n.prevTime,n.prevComposition);if(t.getMeta("addToHistory")!==!1&&!(s&&s.getMeta("addToHistory")===!1)){let l=t.getMeta("composition"),a=n.prevTime==0||!s&&n.prevComposition!=l&&(n.prevTime<(t.time||0)-r.newGroupDelay||!Wh(t,n.prevRanges)),c=s?Ii(n.prevRanges,t.mapping):nc(t.mapping.maps);return new Te(n.done.addTransform(t,a?e.selection.getBookmark():void 0,r,Mr(e)),gt.empty,c,t.time,l??n.prevComposition)}else return(i=t.getMeta("rebased"))?new Te(n.done.rebased(t,i),n.undone.rebased(t,i),Ii(n.prevRanges,t.mapping),n.prevTime,n.prevComposition):new Te(n.done.addMaps(t.mapping.maps),n.undone.addMaps(t.mapping.maps),Ii(n.prevRanges,t.mapping),n.prevTime,n.prevComposition)}function Wh(n,e){if(!e)return!1;if(!n.docChanged)return!0;let t=!1;return n.mapping.maps[0].forEach((r,o)=>{for(let i=0;i=e[i]&&(t=!0)}),t}function nc(n){let e=[];for(let t=n.length-1;t>=0&&e.length==0;t--)n[t].forEach((r,o,i,s)=>e.push(i,s));return e}function Ii(n,e){if(!n)return null;let t=[];for(let r=0;r{let o=Ne.getState(t);if(!o||(n?o.undone:o.done).eventCount==0)return!1;if(r){let i=Kh(o,t,n);i&&r(e?i.scrollIntoView():i)}return!0}}var ic=Er(!1,!0),sc=Er(!0,!0),qh=Er(!1,!1),Uh=Er(!0,!1);function Gh(n){let e=Ne.getState(n);return e?e.done.eventCount:0}function Yh(n){let e=Ne.getState(n);return e?e.undone.eventCount:0}function Xh(n){return n.getMeta(Ne)!=null}var qi={};ce(qi,{CellBookmark:()=>wc,CellSelection:()=>_,ResizeState:()=>Lc,TableMap:()=>I,TableView:()=>Fc,__clipCells:()=>Pc,__insertCells:()=>Vi,__pastedCells:()=>_c,addColSpan:()=>Ki,addColumn:()=>Hi,addColumnAfter:()=>xm,addColumnBefore:()=>km,addRow:()=>Ji,addRowAfter:()=>Cm,addRowBefore:()=>wm,cellAround:()=>$e,cellNear:()=>ji,colCount:()=>sm,columnIsHeader:()=>Sc,columnResizing:()=>Wm,columnResizingPluginKey:()=>le,deleteCellSelection:()=>wn,deleteColumn:()=>Sm,deleteRow:()=>Mm,deleteTable:()=>Pm,findCell:()=>im,findCellPos:()=>Li,findCellRange:()=>pm,findTable:()=>En,fixTables:()=>Oc,fixTablesKey:()=>Mc,goToNextCell:()=>_m,handlePaste:()=>Bc,inSameTable:()=>Mn,isInTable:()=>he,mergeCells:()=>Om,moveCellForward:()=>xc,moveTableColumn:()=>zm,moveTableRow:()=>Bm,nextCell:()=>Wi,pointsAtCell:()=>vr,removeColSpan:()=>Qe,removeColumn:()=>vc,removeRow:()=>Rc,rowIsHeader:()=>Dc,selectedRect:()=>ye,selectionCell:()=>Cn,setCellAttr:()=>Nm,splitCell:()=>Tm,splitCellWithType:()=>Ic,tableEditing:()=>Zm,tableEditingKey:()=>Le,tableNodeTypes:()=>G,tableNodes:()=>rm,toggleHeader:()=>Rr,toggleHeaderCell:()=>Rm,toggleHeaderColumn:()=>Dm,toggleHeaderRow:()=>vm,updateColumnsOnResize:()=>Dr});var zi,Fi;if(typeof WeakMap<"u"){let n=new WeakMap;zi=e=>n.get(e),Fi=(e,t)=>(n.set(e,t),t)}else{let n=[],t=0;zi=r=>{for(let o=0;o(t==10&&(t=0),n[t++]=r,n[t++]=o)}var I=class{constructor(n,e,t,r){this.width=n,this.height=e,this.map=t,this.problems=r}findCell(n){for(let e=0;e=t){(i||(i=[])).push({type:"overlong_rowspan",pos:d,n:y-M});break}let v=o+M*e;for(let A=0;Ar&&(i+=c.attrs.colspan)}}for(let s=0;s1&&(t=!0)}e==-1?e=i:e!=i&&(e=Math.max(e,i))}return e}function em(n,e,t){n.problems||(n.problems=[]);let r={};for(let o=0;oNumber(s)):null,o=Number(n.getAttribute("colspan")||1),i={colspan:o,rowspan:Number(n.getAttribute("rowspan")||1),colwidth:r&&r.length==o?r:null};for(let s in e){let l=e[s].getFromDOM,a=l&&l(n);a!=null&&(i[s]=a)}return i}function ac(n,e){let t={};n.attrs.colspan!=1&&(t.colspan=n.attrs.colspan),n.attrs.rowspan!=1&&(t.rowspan=n.attrs.rowspan),n.attrs.colwidth&&(t["data-colwidth"]=n.attrs.colwidth.join(","));for(let r in e){let o=e[r].setDOMAttr;o&&o(n.attrs[r],t)}return t}function nm(n){if(n!==null){if(!Array.isArray(n))throw new TypeError("colwidth must be null or an array");for(let e of n)if(typeof e!="number")throw new TypeError("colwidth must be null or an array of numbers")}}function rm(n){let e=n.cellAttributes||{},t={colspan:{default:1,validate:"number"},rowspan:{default:1,validate:"number"},colwidth:{default:null,validate:nm}};for(let r in e)t[r]={default:e[r].default,validate:e[r].validate};return{table:{content:"table_row+",tableRole:"table",isolating:!0,group:n.tableGroup,parseDOM:[{tag:"table"}],toDOM(){return["table",["tbody",0]]}},table_row:{content:"(table_cell | table_header)*",tableRole:"row",parseDOM:[{tag:"tr"}],toDOM(){return["tr",0]}},table_cell:{content:n.cellContent,attrs:t,tableRole:"cell",isolating:!0,parseDOM:[{tag:"td",getAttrs:r=>lc(r,e)}],toDOM(r){return["td",ac(r,e),0]}},table_header:{content:n.cellContent,attrs:t,tableRole:"header_cell",isolating:!0,parseDOM:[{tag:"th",getAttrs:r=>lc(r,e)}],toDOM(r){return["th",ac(r,e),0]}}}}function G(n){let e=n.cached.tableNodeTypes;if(!e){e=n.cached.tableNodeTypes={};for(let t in n.nodes){let r=n.nodes[t],o=r.spec.tableRole;o&&(e[o]=r)}}return e}var Le=new K("selectingCells");function $e(n){for(let e=n.depth-1;e>0;e--)if(n.node(e).type.spec.tableRole=="row")return n.node(0).resolve(n.before(e+1));return null}function om(n){for(let e=n.depth;e>0;e--){let t=n.node(e).type.spec.tableRole;if(t==="cell"||t==="header_cell")return n.node(e)}return null}function he(n){let e=n.selection.$head;for(let t=e.depth;t>0;t--)if(e.node(t).type.spec.tableRole=="row")return!0;return!1}function Cn(n){let e=n.selection;if("$anchorCell"in e&&e.$anchorCell)return e.$anchorCell.pos>e.$headCell.pos?e.$anchorCell:e.$headCell;if("node"in e&&e.node&&e.node.type.spec.tableRole=="cell")return e.$anchor;let t=$e(e.$head)||ji(e.$head);if(t)return t;throw new RangeError(`No cell found around position ${e.head}`)}function ji(n){for(let e=n.nodeAfter,t=n.pos;e;e=e.firstChild,t++){let r=e.type.spec.tableRole;if(r=="cell"||r=="header_cell")return n.doc.resolve(t)}for(let e=n.nodeBefore,t=n.pos;e;e=e.lastChild,t--){let r=e.type.spec.tableRole;if(r=="cell"||r=="header_cell")return n.doc.resolve(t-e.nodeSize)}}function vr(n){return n.parent.type.spec.tableRole=="row"&&!!n.nodeAfter}function xc(n){return n.node(0).resolve(n.pos+n.nodeAfter.nodeSize)}function Mn(n,e){return n.depth==e.depth&&n.pos>=e.start(-1)&&n.pos<=e.end(-1)}function im(n){return I.get(n.node(-1)).findCell(n.pos-n.start(-1))}function sm(n){return I.get(n.node(-1)).colCount(n.pos-n.start(-1))}function Wi(n,e,t){let r=n.node(-1),o=I.get(r),i=n.start(-1),s=o.nextCell(n.pos-i,e,t);return s==null?null:n.node(0).resolve(i+s)}function Qe(n,e,t=1){let r={...n,colspan:n.colspan-t};return r.colwidth&&(r.colwidth=r.colwidth.slice(),r.colwidth.splice(e,t),r.colwidth.some(o=>o>0)||(r.colwidth=null)),r}function Ki(n,e,t=1){let r={...n,colspan:n.colspan+t};if(r.colwidth){r.colwidth=r.colwidth.slice();for(let o=0;od!=t.pos-i);a.unshift(t.pos-i);let c=a.map(d=>{let f=r.nodeAt(d);if(!f)throw new RangeError(`No cell with offset ${d} found`);let u=i+d+1;return new De(l.resolve(u),l.resolve(u+f.content.size))});super(c[0].$from,c[0].$to,c),this.$anchorCell=e,this.$headCell=t}map(e,t){let r=e.resolve(t.map(this.$anchorCell.pos)),o=e.resolve(t.map(this.$headCell.pos));if(vr(r)&&vr(o)&&Mn(r,o)){let i=this.$anchorCell.node(-1)!=r.node(-1);return i&&this.isRowSelection()?Fe.rowSelection(r,o):i&&this.isColSelection()?Fe.colSelection(r,o):new Fe(r,o)}return O.between(r,o)}content(){let e=this.$anchorCell.node(-1),t=I.get(e),r=this.$anchorCell.start(-1),o=t.rectBetween(this.$anchorCell.pos-r,this.$headCell.pos-r),i={},s=[];for(let a=o.top;a0||g>0){let y=h.attrs;if(m>0&&(y=Qe(y,0,m)),g>0&&(y=Qe(y,y.colspan-g,g)),p.lefto.bottom){let y={...h.attrs,rowspan:Math.min(p.bottom,o.bottom)-Math.max(p.top,o.top)};p.top0)return!1;let r=e+this.$anchorCell.nodeAfter.attrs.rowspan,o=t+this.$headCell.nodeAfter.attrs.rowspan;return Math.max(r,o)==this.$headCell.node(-1).childCount}static colSelection(e,t=e){let r=e.node(-1),o=I.get(r),i=e.start(-1),s=o.findCell(e.pos-i),l=o.findCell(t.pos-i),a=e.node(0);return s.top<=l.top?(s.top>0&&(e=a.resolve(i+o.map[s.left])),l.bottom0&&(t=a.resolve(i+o.map[l.left])),s.bottom0)return!1;let s=o+this.$anchorCell.nodeAfter.attrs.colspan,l=i+this.$headCell.nodeAfter.attrs.colspan;return Math.max(s,l)==t.width}eq(e){return e instanceof Fe&&e.$anchorCell.pos==this.$anchorCell.pos&&e.$headCell.pos==this.$headCell.pos}static rowSelection(e,t=e){let r=e.node(-1),o=I.get(r),i=e.start(-1),s=o.findCell(e.pos-i),l=o.findCell(t.pos-i),a=e.node(0);return s.left<=l.left?(s.left>0&&(e=a.resolve(i+o.map[s.top*o.width])),l.right0&&(t=a.resolve(i+o.map[l.top*o.width])),s.right{e.push(oe.node(r,r+t.nodeSize,{class:"selectedCell"}))}),$.create(n.doc,e)}function am({$from:n,$to:e}){if(n.pos==e.pos||n.pos=0&&!(n.after(o+1)=0&&!(e.before(i+1)>e.start(i));i--,r--);return t==r&&/row|table/.test(n.node(o).type.spec.tableRole)}function cm({$from:n,$to:e}){let t,r;for(let o=n.depth;o>0;o--){let i=n.node(o);if(i.type.spec.tableRole==="cell"||i.type.spec.tableRole==="header_cell"){t=i;break}}for(let o=e.depth;o>0;o--){let i=e.node(o);if(i.type.spec.tableRole==="cell"||i.type.spec.tableRole==="header_cell"){r=i;break}}return t!==r&&e.parentOffset===0}function dm(n,e,t){let r=(e||n).selection,o=(e||n).doc,i,s;if(r instanceof w&&(s=r.node.type.spec.tableRole)){if(s=="cell"||s=="header_cell")i=_.create(o,r.from);else if(s=="row"){let l=o.resolve(r.from+1);i=_.rowSelection(l,l)}else if(!t){let l=I.get(r.node),a=r.from+1,c=a+l.map[l.width*l.height-1];i=_.create(o,a+1,c)}}else r instanceof O&&am(r)?i=O.create(o,r.from):r instanceof O&&cm(r)&&(i=O.create(o,r.$from.start(),r.$from.end()));return i&&(e||(e=n.tr)).setSelection(i),e}var Mc=new K("fix-tables");function Ec(n,e,t,r){let o=n.childCount,i=e.childCount;e:for(let s=0,l=0;s{o.type.spec.tableRole=="table"&&(t=fm(n,o,i,t))};return e?e.doc!=n.doc&&Ec(e.doc,n.doc,0,r):n.doc.descendants(r),t}function fm(n,e,t,r){let o=I.get(e);if(!o.problems)return r;r||(r=n.tr);let i=[];for(let a=0;a0){let p="cell";d.firstChild&&(p=d.firstChild.type.spec.tableRole);let h=[];for(let g=0;g0){let d=a-o;if(c===e.map[d]){s.push(null);continue}}if(l>0){let d=a-1;if(c===e.map[d]){s.push(null);continue}}s.push(n.nodeAt(c))}t.push(s)}return t}function Nc(n,e){let t=[],r=I.get(n),o=r.height,i=r.width;for(let s=0;st[0]?-1:1,i=n.splice(e[0],e.length),s=i.length%2===0?1:0,l;return r===-1&&o===1?l=t[0]-1:r===1&&o===-1?l=t[t.length-1]-s+1:l=o===-1?t[0]:t[t.length-1]-s,n.splice(l,0,...i),n}function um(n){return n instanceof _}function En(n){return hm(e=>e.type.spec.tableRole==="table",n)}function pm(n,e,t){var r,o;if(e==null&&t==null&&um(n))return[n.$anchorCell,n.$headCell];let i=(r=e??t)!==null&&r!==void 0?r:n.anchor,s=(o=t??e)!==null&&o!==void 0?o:n.head,l=n.$head.doc,a=Li(l,i),c=Li(l,s);return a&&c&&Mn(a,c)?[a,c]:null}function Li(n,e){let t=n.resolve(e);return $e(t)||ji(t)}function hm(n,e){for(let t=e.depth;t>=0;t-=1){let r=e.node(t);if(n(r))return{node:r,pos:t===0?0:e.before(t),start:e.start(t),depth:t}}return null}function Vt(n,e){let t=En(e.$from);if(!t)return;let r=I.get(t.node);if(!(n<0||n>r.width-1))return r.cellsInRect({left:n,right:n+1,top:0,bottom:r.height}).map(o=>{let i=t.node.nodeAt(o),s=o+t.start;return{pos:s,start:s+1,node:i,depth:t.depth+2}})}function jt(n,e){let t=En(e.$from);if(!t)return;let r=I.get(t.node);if(!(n<0||n>r.height-1))return r.cellsInRect({left:0,right:r.width,top:n,bottom:n+1}).map(o=>{let i=t.node.nodeAt(o),s=o+t.start;return{pos:s,start:s+1,node:i,depth:t.depth+2}})}function cc(n,e,t=e){let r=e,o=t;for(let d=e;d>=0;d--){let f=Vt(d,n.selection);f&&f.forEach(u=>{let p=u.node.attrs.colspan+d-1;p>=r&&(r=d),p>o&&(o=p)})}for(let d=e;d<=o;d++){let f=Vt(d,n.selection);f&&f.forEach(u=>{let p=u.node.attrs.colspan+d-1;u.node.attrs.colspan>1&&p>o&&(o=p)})}let i=[];for(let d=r;d<=o;d++){let f=Vt(d,n.selection);f&&f.length>0&&i.push(d)}r=i[0],o=i[i.length-1];let s=Vt(r,n.selection),l=jt(0,n.selection);if(!s||!l)return;let a=n.doc.resolve(s[s.length-1].pos),c;for(let d=o;d>=r;d--){let f=Vt(d,n.selection);if(f&&f.length>0){for(let u=l.length-1;u>=0;u--)if(l[u].pos===f[0].pos){c=f[0];break}if(c)break}}if(c)return{$anchor:a,$head:n.doc.resolve(c.pos),indexes:i}}function dc(n,e,t=e){let r=e,o=t;for(let d=e;d>=0;d--){let f=jt(d,n.selection);f&&f.forEach(u=>{let p=u.node.attrs.rowspan+d-1;p>=r&&(r=d),p>o&&(o=p)})}for(let d=e;d<=o;d++){let f=jt(d,n.selection);f&&f.forEach(u=>{let p=u.node.attrs.rowspan+d-1;u.node.attrs.rowspan>1&&p>o&&(o=p)})}let i=[];for(let d=r;d<=o;d++){let f=jt(d,n.selection);f&&f.length>0&&i.push(d)}r=i[0],o=i[i.length-1];let s=jt(r,n.selection),l=Vt(0,n.selection);if(!s||!l)return;let a=n.doc.resolve(s[s.length-1].pos),c;for(let d=o;d>=r;d--){let f=jt(d,n.selection);if(f&&f.length>0){for(let u=l.length-1;u>=0;u--)if(l[u].pos===f[0].pos){c=f[0];break}if(c)break}}if(c)return{$anchor:a,$head:n.doc.resolve(c.pos),indexes:i}}function fc(n){return n[0].map((e,t)=>n.map(r=>r[t]))}function mm(n){var e,t;let{tr:r,originIndex:o,targetIndex:i,select:s,pos:l}=n,a=En(r.doc.resolve(l));if(!a)return!1;let c=(e=cc(r,o))===null||e===void 0?void 0:e.indexes,d=(t=cc(r,i))===null||t===void 0?void 0:t.indexes;if(!c||!d||c.includes(i))return!1;let f=gm(a.node,c,d,0);if(r.replaceWith(a.pos,a.pos+a.node.nodeSize,f),!s)return!0;let u=I.get(f),p=a.start,h=i,m=u.positionAt(u.height-1,h,f),g=r.doc.resolve(p+m),y=u.positionAt(0,h,f),S=r.doc.resolve(p+y);return r.setSelection(_.colSelection(g,S)),!0}function gm(n,e,t,r){let o=fc(Tc(n));return o=Ac(o,e,t,r),o=fc(o),Nc(n,o)}function ym(n){var e,t;let{tr:r,originIndex:o,targetIndex:i,select:s,pos:l}=n,a=En(r.doc.resolve(l));if(!a)return!1;let c=(e=dc(r,o))===null||e===void 0?void 0:e.indexes,d=(t=dc(r,i))===null||t===void 0?void 0:t.indexes;if(!c||!d||c.includes(i))return!1;let f=bm(a.node,c,d,0);if(r.replaceWith(a.pos,a.pos+a.node.nodeSize,f),!s)return!0;let u=I.get(f),p=a.start,h=i,m=u.positionAt(h,u.width-1,f),g=r.doc.resolve(p+m),y=u.positionAt(h,0,f),S=r.doc.resolve(p+y);return r.setSelection(_.rowSelection(g,S)),!0}function bm(n,e,t,r){let o=Tc(n);return o=Ac(o,e,t,r),Nc(n,o)}function ye(n){let e=n.selection,t=Cn(n),r=t.node(-1),o=t.start(-1),i=I.get(r);return{...e instanceof _?i.rectBetween(e.$anchorCell.pos-o,e.$headCell.pos-o):i.findCell(t.pos-o),tableStart:o,map:i,table:r}}function Hi(n,{map:e,tableStart:t,table:r},o){let i=o>0?-1:0;Sc(e,r,o+i)&&(i=o==0||o==e.width?null:0);for(let s=0;s0&&o0&&e.map[l-1]==a||o0?-1:0;Dc(e,r,o+l)&&(l=o==0||o==e.height?null:0);for(let c=0,d=e.width*o;c0&&o0&&f==e.map[d-e.width]){let u=t.nodeAt(f).attrs;n.setNodeMarkup(n.mapping.slice(l).map(f+r),null,{...u,rowspan:u.rowspan-1}),c+=u.colspan-1}else if(o0&&t[i]==t[i-1]||r.right0&&t[o]==t[o-n]||r.bottom0){let d=a+1+c.content.size,f=uc(c)?a+1:d;i.replaceWith(f+r.tableStart,d+r.tableStart,l)}i.setSelection(new _(i.doc.resolve(a+r.tableStart))),e(i)}return!0}function Tm(n,e){let t=G(n.schema);return Ic(({node:r})=>t[r.type.spec.tableRole])(n,e)}function Ic(n){return(e,t)=>{let r=e.selection,o,i;if(r instanceof _){if(r.$anchorCell.pos!=r.$headCell.pos)return!1;o=r.$anchorCell.nodeAfter,i=r.$anchorCell.pos}else{var s;if(o=om(r.$from),!o)return!1;i=(s=$e(r.$from))===null||s===void 0?void 0:s.pos}if(o==null||i==null||o.attrs.colspan==1&&o.attrs.rowspan==1)return!1;if(t){let l=o.attrs,a=[],c=l.colwidth;l.rowspan>1&&(l={...l,rowspan:1}),l.colspan>1&&(l={...l,colspan:1});let d=ye(e),f=e.tr;for(let p=0;p{s.attrs[n]!==e&&i.setNodeMarkup(l,null,{...s.attrs,[n]:e})}):i.setNodeMarkup(o.pos,null,{...o.nodeAfter.attrs,[n]:e}),r(i)}return!0}}function Am(n){return function(e,t){if(!he(e))return!1;if(t){let r=G(e.schema),o=ye(e),i=e.tr,s=o.map.cellsInRect(n=="column"?{left:o.left,top:0,right:o.right,bottom:o.map.height}:n=="row"?{left:0,top:o.top,right:o.map.width,bottom:o.bottom}:o),l=s.map(a=>o.table.nodeAt(a));for(let a=0;a{let p=u+i.tableStart,h=s.doc.nodeAt(p);h&&s.setNodeMarkup(p,f,h.attrs)}),r(s)}return!0}}var vm=Rr("row",{useDeprecatedLogic:!0}),Dm=Rr("column",{useDeprecatedLogic:!0}),Rm=Rr("cell",{useDeprecatedLogic:!0});function Im(n,e){if(e<0){let t=n.nodeBefore;if(t)return n.pos-t.nodeSize;for(let r=n.index(-1)-1,o=n.before();r>=0;r--){let i=n.node(-1).child(r),s=i.lastChild;if(s)return o-1-s.nodeSize;o-=i.nodeSize}}else{if(n.index()0;r--)if(t.node(r).type.spec.tableRole=="table")return e&&e(n.tr.delete(t.before(r),t.after(r)).scrollIntoView()),!0;return!1}function wn(n,e){let t=n.selection;if(!(t instanceof _))return!1;if(e){let r=n.tr,o=G(n.schema).cell.createAndFill().content;t.forEachCell((i,s)=>{i.content.eq(o)||r.replace(r.mapping.map(s+1),r.mapping.map(s+i.nodeSize-1),new k(o,0,0))}),r.docChanged&&e(r)}return!0}function Bm(n){return(e,t)=>{let{from:r,to:o,select:i=!0,pos:s=e.selection.from}=n,l=e.tr;return ym({tr:l,originIndex:r,targetIndex:o,select:i,pos:s})?(t?.(l),!0):!1}}function zm(n){return(e,t)=>{let{from:r,to:o,select:i=!0,pos:s=e.selection.from}=n,l=e.tr;return mm({tr:l,originIndex:r,targetIndex:o,select:i,pos:s})?(t?.(l),!0):!1}}function _c(n){if(n.size===0)return null;let{content:e,openStart:t,openEnd:r}=n;for(;e.childCount==1&&(t>0&&r>0||e.child(0).type.spec.tableRole=="table");)t--,r--,e=e.child(0).content;let o=e.child(0),i=o.type.spec.tableRole,s=o.type.schema,l=[];if(i=="row")for(let a=0;a=0;s--){let{rowspan:l,colspan:a}=i.child(s).attrs;for(let c=o;c=e.length&&e.push(b.empty),t[o]r&&(u=u.type.createChecked(Qe(u.attrs,u.attrs.colspan,d+u.attrs.colspan-r),u.content)),c.push(u),d+=u.attrs.colspan;for(let p=1;po&&(f=f.type.create({...f.attrs,rowspan:Math.max(1,o-f.attrs.rowspan)},f.content)),a.push(f)}i.push(b.from(a))}t=i,e=o}return{width:n,height:e,rows:t}}function Lm(n,e,t,r,o,i,s){let l=n.doc.type.schema,a=G(l),c,d;if(o>e.width)for(let f=0,u=0;fe.height){let f=[];for(let h=0,m=(e.height-1)*e.width;h=e.width?!1:t.nodeAt(e.map[m+h]).type==a.header_cell;f.push(g?d||(d=a.header_cell.createAndFill()):c||(c=a.cell.createAndFill()))}let u=a.row.create(null,b.from(f)),p=[];for(let h=e.height;h{if(!o)return!1;let i=t.selection;if(i instanceof _)return Nr(t,r,C.near(i.$headCell,e));if(n!="horiz"&&!i.empty)return!1;let s=zc(o,n,e);if(s==null)return!1;if(n=="horiz")return Nr(t,r,C.near(t.doc.resolve(i.head+e),e));{let l=t.doc.resolve(s),a=Wi(l,n,e),c;return a?c=C.near(a,1):e<0?c=C.near(t.doc.resolve(l.before(-1)),-1):c=C.near(t.doc.resolve(l.after(-1)),1),Nr(t,r,c)}}}function Tr(n,e){return(t,r,o)=>{if(!o)return!1;let i=t.selection,s;if(i instanceof _)s=i;else{let a=zc(o,n,e);if(a==null)return!1;s=new _(t.doc.resolve(a))}let l=Wi(s.$headCell,n,e);return l?Nr(t,r,new _(s.$anchorCell,l)):!1}}function Vm(n,e){let t=n.state.doc,r=$e(t.resolve(e));return r?(n.dispatch(n.state.tr.setSelection(new _(r))),!0):!1}function Bc(n,e,t){if(!he(n.state))return!1;let r=_c(t),o=n.state.selection;if(o instanceof _){r||(r={width:1,height:1,rows:[b.from($i(G(n.state.schema).cell,t))]});let i=o.$anchorCell.node(-1),s=o.$anchorCell.start(-1),l=I.get(i).rectBetween(o.$anchorCell.pos-s,o.$headCell.pos-s);return r=Pc(r,l.right-l.left,l.bottom-l.top),Vi(n.state,n.dispatch,s,l,r),!0}else if(r){let i=Cn(n.state),s=i.start(-1);return Vi(n.state,n.dispatch,s,I.get(i.node(-1)).findCell(i.pos-s),r),!0}else return!1}function jm(n,e){var t;if(e.button!=0||e.ctrlKey||e.metaKey)return;let r=gc(n,e.target),o;if(e.shiftKey&&n.state.selection instanceof _)i(n.state.selection.$anchorCell,e),e.preventDefault();else if(e.shiftKey&&r&&(o=$e(n.state.selection.$anchor))!=null&&((t=Bi(n,e))===null||t===void 0?void 0:t.pos)!=o.pos)i(o,e),e.preventDefault();else if(!r)return;function i(a,c){let d=Bi(n,c),f=Le.getState(n.state)==null;if(!d||!Mn(a,d))if(f)d=a;else return;let u=new _(a,d);if(f||!n.state.selection.eq(u)){let p=n.state.tr.setSelection(u);f&&p.setMeta(Le,a.pos),n.dispatch(p)}}function s(){n.root.removeEventListener("mouseup",s),n.root.removeEventListener("dragstart",s),n.root.removeEventListener("mousemove",l),Le.getState(n.state)!=null&&n.dispatch(n.state.tr.setMeta(Le,-1))}function l(a){let c=a,d=Le.getState(n.state),f;if(d!=null)f=n.state.doc.resolve(d);else if(gc(n,c.target)!=r&&(f=Bi(n,e),!f))return s();f&&i(f,c)}n.root.addEventListener("mouseup",s),n.root.addEventListener("dragstart",s),n.root.addEventListener("mousemove",l)}function zc(n,e,t){if(!(n.state.selection instanceof O))return null;let{$head:r}=n.state.selection;for(let o=r.depth-1;o>=0;o--){let i=r.node(o);if((t<0?r.index(o):r.indexAfter(o))!=(t<0?0:i.childCount))return null;if(i.type.spec.tableRole=="cell"||i.type.spec.tableRole=="header_cell"){let s=r.before(o),l=e=="vert"?t>0?"down":"up":t>0?"right":"left";return n.endOfTextblock(l)?s:null}}return null}function gc(n,e){for(;e&&e!=n.dom;e=e.parentNode)if(e.nodeName=="TD"||e.nodeName=="TH")return e;return null}function Bi(n,e){let t=n.posAtCoords({left:e.clientX,top:e.clientY});if(!t)return null;let{inside:r,pos:o}=t;return r>=0&&$e(n.state.doc.resolve(r))||$e(n.state.doc.resolve(o))}var Fc=class{constructor(n,e){this.node=n,this.defaultCellMinWidth=e,this.dom=document.createElement("div"),this.dom.className="tableWrapper",this.table=this.dom.appendChild(document.createElement("table")),this.table.style.setProperty("--default-cell-min-width",`${e}px`),this.colgroup=this.table.appendChild(document.createElement("colgroup")),Dr(n,this.colgroup,this.table,e),this.contentDOM=this.table.appendChild(document.createElement("tbody"))}update(n){return n.type!=this.node.type?!1:(this.node=n,Dr(n,this.colgroup,this.table,this.defaultCellMinWidth),!0)}ignoreMutation(n){return n.type=="attributes"&&(n.target==this.table||this.colgroup.contains(n.target))}};function Dr(n,e,t,r,o,i){let s=0,l=!0,a=e.firstChild,c=n.firstChild;if(c){for(let f=0,u=0;fnew r(f,t,u)),new Lc(-1,!1)},apply(s,l){return l.apply(s)}},props:{attributes:s=>{let l=le.getState(s);return l&&l.activeHandle>-1?{class:"resize-cursor"}:{}},handleDOMEvents:{mousemove:(s,l)=>{Km(s,l,n,o)},mouseleave:s=>{Hm(s)},mousedown:(s,l)=>{Jm(s,l,e,t)}},decorations:s=>{let l=le.getState(s);if(l&&l.activeHandle>-1)return Xm(s,l.activeHandle)},nodeViews:{}}});return i}var Lc=class Ar{constructor(e,t){this.activeHandle=e,this.dragging=t}apply(e){let t=this,r=e.getMeta(le);if(r&&r.setHandle!=null)return new Ar(r.setHandle,!1);if(r&&r.setDragging!==void 0)return new Ar(t.activeHandle,r.setDragging);if(t.activeHandle>-1&&e.docChanged){let o=e.mapping.map(t.activeHandle,-1);return vr(e.doc.resolve(o))||(o=-1),new Ar(o,t.dragging)}return t}};function Km(n,e,t,r){if(!n.editable)return;let o=le.getState(n.state);if(o&&!o.dragging){let i=Um(e.target),s=-1;if(i){let{left:l,right:a}=i.getBoundingClientRect();e.clientX-l<=t?s=yc(n,e,"left",t):a-e.clientX<=t&&(s=yc(n,e,"right",t))}if(s!=o.activeHandle){if(!r&&s!==-1){let l=n.state.doc.resolve(s),a=l.node(-1),c=I.get(a),d=l.start(-1);if(c.colCount(l.pos-d)+l.nodeAfter.attrs.colspan-1==c.width-1)return}$c(n,s)}}}function Hm(n){if(!n.editable)return;let e=le.getState(n.state);e&&e.activeHandle>-1&&!e.dragging&&$c(n,-1)}function Jm(n,e,t,r){var o;if(!n.editable)return!1;let i=(o=n.dom.ownerDocument.defaultView)!==null&&o!==void 0?o:window,s=le.getState(n.state);if(!s||s.activeHandle==-1||s.dragging)return!1;let l=n.state.doc.nodeAt(s.activeHandle),a=qm(n,s.activeHandle,l.attrs);n.dispatch(n.state.tr.setMeta(le,{setDragging:{startX:e.clientX,startWidth:a}}));function c(f){i.removeEventListener("mouseup",c),i.removeEventListener("mousemove",d);let u=le.getState(n.state);u?.dragging&&(Gm(n,u.activeHandle,bc(u.dragging,f,t)),n.dispatch(n.state.tr.setMeta(le,{setDragging:null})))}function d(f){if(!f.which)return c(f);let u=le.getState(n.state);if(u&&u.dragging){let p=bc(u.dragging,f,t);kc(n,u.activeHandle,p,r)}}return kc(n,s.activeHandle,a,r),i.addEventListener("mouseup",c),i.addEventListener("mousemove",d),e.preventDefault(),!0}function qm(n,e,{colspan:t,colwidth:r}){let o=r&&r[r.length-1];if(o)return o;let i=n.domAtPos(e),s=i.node.childNodes[i.offset].offsetWidth,l=t;if(r)for(let a=0;ae==="html"?{format:e,value:n.getHTML()}:{format:e,value:n.getJSON()})}function fg(n){let e=ts();for(let t of n.selectionContributors)Object.assign(e,t(n.editor));return Object.assign(e,ug(n.editor)),e}function ug(n){let e=n.state.selection,t=e.from,r=e.to,o=e.empty,i=null,s=null,l=null;return n.state.doc.forEach((a,c,d)=>{if(i!=null)return;let f=c+1,u=c+a.nodeSize-1;t>=f&&t<=u&&(i=d,s=f,l=u)}),{current_block_index:i,current_block_from:s,current_block_to:l,selection_from:t,selection_to:r,selection_empty:o}}function On(n,e){return(n??null)===(e??null)}function pg(n,e){return(n??null)===(e??null)}function hg(n,e){let t=new Set(["current_block_index","current_block_from","current_block_to","selection_from","selection_to","selection_empty"]),r=new Set([...Object.keys(n),...Object.keys(e)].filter(o=>!t.has(o)));for(let o of r)if((n[o]??!1)!==(e[o]??!1))return!1;return On(n.current_block_index,e.current_block_index)&&On(n.current_block_from,e.current_block_from)&&On(n.current_block_to,e.current_block_to)&&On(n.selection_from,e.selection_from)&&On(n.selection_to,e.selection_to)&&pg(n.selection_empty,e.selection_empty)}function Gc(n,e={}){let t=fg(n);e.force!==!0&&n.lastSelectionState!=null&&hg(n.lastSelectionState,t)||(n.lastSelectionState=t,n.onSelection(t))}function Yc(n,e){try{return Ve(e())}catch(t){let r=`${n} failed: ${t instanceof Error?t.message:String(t)}`;return console.error(r,t),Ae("operation_failed",r,n)}}function E(n,e){try{return e()===!1?Ae("command_rejected",`Tiptap rejected the ${n} command for the current editor state.`,n):Jc()}catch(t){let r=`${n} failed: ${t instanceof Error?t.message:String(t)}`;return console.error(r,t),Ae("operation_failed",r,n)}}function Xc(n){return n==null?{}:{preserveWhitespace:n.preserve_whitespace,from:n.from,to:n.to}}function mg(n){return{scrollIntoView:n?.scroll_into_view}}function Wc(n){return{parseOptions:Xc(n?.parse_options),updateSelection:n?.update_selection,applyInputRules:n?.apply_input_rules,applyPasteRules:n?.apply_paste_rules,errorOnInvalidContent:n?.error_on_invalid_content}}function Kc(n){return{extendEmptyMarkRange:n?.extend_empty_mark_range}}function gg(n,e){switch(e.kind){case"blur":return E(e.kind,()=>n.commands.blur());case"clear_content":return E(e.kind,()=>n.commands.clearContent(e.emit_update));case"clear_nodes":return E(e.kind,()=>n.commands.clearNodes());case"create_paragraph_near":return E(e.kind,()=>n.commands.createParagraphNear());case"cut":return E(e.kind,()=>n.commands.cut(e.range,e.target_pos));case"delete_current_node":return E(e.kind,()=>n.commands.deleteCurrentNode());case"delete_node":return E(e.kind,()=>n.commands.deleteNode(e.type_or_name));case"delete_range":return E(e.kind,()=>n.commands.deleteRange(e.range));case"delete_selection":return E(e.kind,()=>n.commands.deleteSelection());case"enter":return E(e.kind,()=>n.commands.enter());case"exit_code":return E(e.kind,()=>n.commands.exitCode());case"extend_mark_range":return E(e.kind,()=>n.commands.extendMarkRange(e.type_or_name,e.attributes??void 0));case"focus":return E(e.kind,()=>n.commands.focus(e.target??null,mg(e.options)));case"insert_content":{let t=_r(e.content);if(!t.ok)return t;let{from:r,to:o}=n.state.selection;return E(e.kind,()=>n.commands.insertContentAt({from:r,to:o},t.value,Wc(e.options)))}case"insert_content_at":{let t=_r(e.content);return t.ok?E(e.kind,()=>n.commands.insertContentAt(e.position,t.value,Wc(e.options))):t}case"join_up":return E(e.kind,()=>n.commands.joinUp());case"join_down":return E(e.kind,()=>n.commands.joinDown());case"join_backward":return E(e.kind,()=>n.commands.joinBackward());case"join_forward":return E(e.kind,()=>n.commands.joinForward());case"join_item_backward":return E(e.kind,()=>n.commands.joinItemBackward());case"join_item_forward":return E(e.kind,()=>n.commands.joinItemForward());case"join_textblock_backward":return E(e.kind,()=>n.commands.joinTextblockBackward());case"join_textblock_forward":return E(e.kind,()=>n.commands.joinTextblockForward());case"keyboard_shortcut":return E(e.kind,()=>n.commands.keyboardShortcut(e.name));case"lift":return E(e.kind,()=>n.commands.lift(e.type_or_name,e.attributes??void 0));case"lift_empty_block":return E(e.kind,()=>n.commands.liftEmptyBlock());case"newline_in_code":return E(e.kind,()=>n.commands.newlineInCode());case"reset_attributes":return E(e.kind,()=>n.commands.resetAttributes(e.type_or_name,e.attribute_names));case"scroll_into_view":return E(e.kind,()=>n.commands.scrollIntoView());case"select_all":return E(e.kind,()=>n.commands.selectAll());case"select_node_backward":return E(e.kind,()=>n.commands.selectNodeBackward());case"select_node_forward":return E(e.kind,()=>n.commands.selectNodeForward());case"select_parent_node":return E(e.kind,()=>n.commands.selectParentNode());case"select_textblock_end":return E(e.kind,()=>n.commands.selectTextblockEnd());case"select_textblock_start":return E(e.kind,()=>n.commands.selectTextblockStart());case"set_mark":return E(e.kind,()=>n.commands.setMark(e.type_or_name,e.attributes??void 0));case"set_meta":return E(e.kind,()=>n.commands.setMeta(e.key,e.value));case"set_node":return E(e.kind,()=>n.commands.setNode(e.type_or_name,e.attributes??void 0));case"set_node_selection":return E(e.kind,()=>n.commands.setNodeSelection(e.position));case"set_text_selection":return E(e.kind,()=>n.commands.setTextSelection(e.position));case"split_block":return E(e.kind,()=>n.commands.splitBlock({keepMarks:e.keep_marks}));case"toggle_list":return E(e.kind,()=>n.commands.toggleList(e.list_type_or_name,e.item_type_or_name,e.keep_marks,e.attributes??void 0));case"toggle_mark":return E(e.kind,()=>n.commands.toggleMark(e.type_or_name,e.attributes??void 0,Kc(e.options)));case"toggle_node":return E(e.kind,()=>n.commands.toggleNode(e.type_or_name,e.toggle_type_or_name,e.attributes??void 0));case"toggle_wrap":return E(e.kind,()=>n.commands.toggleWrap(e.type_or_name,e.attributes??void 0));case"undo_input_rule":return E(e.kind,()=>n.commands.undoInputRule());case"unset_all_marks":return E(e.kind,()=>n.commands.unsetAllMarks());case"unset_mark":return E(e.kind,()=>n.commands.unsetMark(e.type_or_name,Kc(e.options)));case"update_attributes":return E(e.kind,()=>n.commands.updateAttributes(e.type_or_name,e.attributes));case"wrap_in":return E(e.kind,()=>n.commands.wrapIn(e.type_or_name,e.attributes??void 0));case"wrap_in_list":return E(e.kind,()=>n.commands.wrapInList(e.type_or_name,e.attributes??void 0));default:return}}function Zc(n){return n==="html"?"get_content_html":"get_content_json"}function yg(n){let e=[];for(let t of n){let r=Wt.get(t);if(r==null)return qc(`Can not create Tiptap instance, as extension "${t}" is not registered.`);e.push({descriptor:r,selectionKeys:r.selection_keys??[]})}return Ve(e)}function bg(n,e){let t=yg(n);if(!t.ok)return t;let r=new Map,o=[],i=[],s=new Set;for(let{descriptor:l,selectionKeys:a}of t.value){let c;try{c=l.create(e)}catch(d){let f=`Can not create Tiptap instance, as extension "${l.name}" failed to initialize.`;return console.error(f,d),Ae("extension_registration_failed",`${f} ${d instanceof Error?d.message:String(d)}`)}Array.isArray(c)?i.push(...c):i.push(c);for(let d of a){if(s.has(d))return Vc(`Can not create Tiptap instance, as multiple selected extensions contribute selection key "${d}".`);s.add(d)}l.selection_state!=null&&o.push(l.selection_state);for(let[d,f]of Object.entries(l.commands??{}))if(f!=null){if(r.has(d))return Vc(`Can not create Tiptap instance, as multiple selected extensions handle command "${d}".`);r.set(d,f)}}return Ve({extensions:i,commandHandlers:r,selectionContributors:o})}function _y(){Tn.registerExtension=Zi}function Py(n,e,t,r,o){let i=cg(n.id);if(!i.ok){o(i.error);return}let s=ag(n.id);if(!s.ok){o(s.error);return}let l=bg(n.extensions,{placeholder:n.placeholder});if(!l.ok){o(l.error);return}let a=_r(n.content);if(!a.ok){o(a.error);return}let c=rg();be.set(n.id,{generation:c});let d=Yc("create_editor",()=>Xi({element:s.value,editable:n.editable,extensions:l.value.extensions,injectCSS:!1,content:a.value,onUpdate:({editor:u})=>{t()},onSelectionUpdate:({editor:u})=>{lg(n.id,u)}}));if(!d.ok){let u=be.get(n.id);u?.generation===c&&u.entry==null&&be.delete(n.id),o(d.error);return}if(!ig(n.id,c,d.value,r,l.value))return;let f=Qi(n.id);f!=null?(e({generation:c}),Gc(f,{force:!0})):e({generation:c})}function By(n){og(n)}function zy(n){let{id:e,generation:t,command:r}=n;return r.kind==="set_editable"?Ir(e,t,r.kind,({editor:o})=>E(r.kind,()=>{o.setEditable(r.editable)})):Ir(e,t,r.kind,o=>{let i=gg(o.editor,r);if(i!=null)return i;let s=r,l=o.commandHandlers.get(s.kind);return l==null?qc(`Can not execute ${s.kind} for Tiptap instance "${e}", as no active extension provides this command.`,s.kind):E(s.kind,()=>l(o.editor,s))})}function Fy(n){let{id:e,generation:t,request:r}=n;switch(r.kind){case"get_content":return Ir(e,t,Zc(r.format),({editor:o})=>{let i=dg(o,r.format);return i.ok?Ve({kind:"content",content:i.value}):i});case"set_content":return Ir(e,t,r.kind,o=>{let i=_r(r.content);return i.ok?E(r.kind,()=>o.editor.commands.setContent(i.value,r.options?.emit_update??!1,Xc(r.options?.parse_options),{errorOnInvalidContent:r.options?.error_on_invalid_content})):i})}}var Ly={getEditorEntry:Qi,getRegisteredExtensionNames(){return[...Wt.keys()]},hasRegisteredExtension(n){return Wt.has(n)},registerExtension:Zi,reset(){be.clear(),Wt.clear(),Ui(Tn.modules),Tn.registerExtension=Zi,Yi=void 0,Xi=Hc,Gi=1},getSlotCount(){return be.size},setDocument(n){Yi=n},setEditorFactory(n){Xi=n}};export{Ly as __testing,zy as command,Py as create,By as destroy,Fy as document,_y as init_bridge_runtime}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_blockquote.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_blockquote.js index dccd43b5..cf80e266 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_blockquote.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_blockquote.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var x=t.CommandManager,m=t.Editor,k=t.Extension,b=t.InputRule,y=t.Mark,r=t.Node,h=t.NodePos,E=t.NodeView,R=t.PasteRule,f=t.Tracker,P=t.callOrReturn,C=t.canInsertNode,T=t.combineTransactionSteps,A=t.createChainableState,S=t.createDocument,B=t.createNodeFromContent,N=t.createStyleTag,O=t.defaultBlockAt,w=t.deleteProps,v=t.elementFromString,M=t.escapeForRegEx,I=t.extensions,q=t.findChildren,F=t.findChildrenInRange,D=t.findDuplicates,j=t.findParentNode,L=t.findParentNodeClosestToPos,K=t.fromString,H=t.generateHTML,G=t.generateJSON,z=t.generateText,J=t.getAttributes,U=t.getAttributesFromExtensions,V=t.getChangedRanges,Y=t.getDebugJSON,W=t.getExtensionField,$=t.getHTMLFromFragment,Q=t.getMarkAttributes,X=t.getMarkRange,Z=t.getMarkType,tt=t.getMarksBetween,et=t.getNodeAtPosition,nt=t.getNodeAttributes,ot=t.getNodeType,it=t.getRenderedAttributes,rt=t.getSchema,st=t.getSchemaByResolvedExtensions,lt=t.getSchemaTypeByName,at=t.getSchemaTypeNameByName,dt=t.getSplittedAttributes,pt=t.getText,ct=t.getTextBetween,ut=t.getTextContentFromNodes,gt=t.getTextSerializersFromSchema,_t=t.injectExtensionAttributesToParseRule,xt=t.inputRulesPlugin,mt=t.isActive,kt=t.isAtEndOfNode,bt=t.isAtStartOfNode,yt=t.isEmptyObject,ht=t.isExtensionRulesEnabled,Et=t.isFunction,Rt=t.isList,ft=t.isMacOS,Pt=t.isMarkActive,Ct=t.isNodeActive,Tt=t.isNodeEmpty,At=t.isNodeSelection,St=t.isNumber,Bt=t.isPlainObject,Nt=t.isRegExp,Ot=t.isSafari,wt=t.isString,vt=t.isTextSelection,Mt=t.isiOS,It=t.markInputRule,qt=t.markPasteRule,s=t.mergeAttributes,Ft=t.mergeDeep,Dt=t.minMax,jt=t.nodeInputRule,Lt=t.nodePasteRule,Kt=t.objectIncludes,Ht=t.pasteRulesPlugin,Gt=t.posToDOMRect,zt=t.removeDuplicates,Jt=t.resolveFocusPosition,Ut=t.rewriteUnknownContent,Vt=t.selectionToInsertionEnd,Yt=t.splitExtensions,Wt=t.textInputRule,$t=t.textPasteRule,Qt=t.textblockTypeInputRule,l=t.wrappingInputRule;var u=/^\s*>\s$/,a=r.create({name:"blockquote",addOptions(){return{HTMLAttributes:{}}},content:"block+",group:"block",defining:!0,parseHTML(){return[{tag:"blockquote"}]},renderHTML({HTMLAttributes:e}){return["blockquote",s(this.options.HTMLAttributes,e),0]},addCommands(){return{setBlockquote:()=>({commands:e})=>e.wrapIn(this.name),toggleBlockquote:()=>({commands:e})=>e.toggleWrap(this.name),unsetBlockquote:()=>({commands:e})=>e.lift(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-b":()=>this.editor.commands.toggleBlockquote()}},addInputRules(){return[l({find:u,type:this.type})]}});var d="__LEPTOS_TIPTAP_BRIDGE__";function g(){let e=globalThis,o=e[d];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[d]=i,i}function p(){return g()}function c(e){p().registerExtension(e)}var _={name:"blockquote",create:()=>a,commands:{set_blockquote:e=>e.chain().focus().setBlockquote().run(),toggle_blockquote:e=>e.chain().focus().toggleBlockquote().run(),unset_blockquote:e=>e.chain().focus().unsetBlockquote().run()},selection_keys:["blockquote"],selection_state:e=>({blockquote:e.isActive("blockquote")})};function se(){c(_)}export{se as register_blockquote}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var x=e.CommandManager,m=e.Editor,k=e.Extension,b=e.InputRule,y=e.Mark,r=e.Node,h=e.NodePos,f=e.NodeView,E=e.PasteRule,R=e.Tracker,P=e.callOrReturn,C=e.canInsertNode,T=e.combineTransactionSteps,A=e.createChainableState,S=e.createDocument,B=e.createNodeFromContent,w=e.createStyleTag,N=e.defaultBlockAt,O=e.deleteProps,v=e.elementFromString,M=e.escapeForRegEx,I=e.extensions,q=e.findChildren,F=e.findChildrenInRange,D=e.findDuplicates,j=e.findParentNode,L=e.findParentNodeClosestToPos,K=e.fromString,H=e.generateHTML,G=e.generateJSON,z=e.generateText,J=e.getAttributes,U=e.getAttributesFromExtensions,V=e.getChangedRanges,Y=e.getDebugJSON,W=e.getExtensionField,$=e.getHTMLFromFragment,Q=e.getMarkAttributes,X=e.getMarkRange,Z=e.getMarkType,ee=e.getMarksBetween,te=e.getNodeAtPosition,ne=e.getNodeAttributes,oe=e.getNodeType,ie=e.getRenderedAttributes,re=e.getSchema,se=e.getSchemaByResolvedExtensions,le=e.getSchemaTypeByName,ae=e.getSchemaTypeNameByName,de=e.getSplittedAttributes,pe=e.getText,ce=e.getTextBetween,ue=e.getTextContentFromNodes,ge=e.getTextSerializersFromSchema,_e=e.injectExtensionAttributesToParseRule,xe=e.inputRulesPlugin,me=e.isActive,ke=e.isAtEndOfNode,be=e.isAtStartOfNode,ye=e.isEmptyObject,he=e.isExtensionRulesEnabled,fe=e.isFunction,Ee=e.isList,Re=e.isMacOS,Pe=e.isMarkActive,Ce=e.isNodeActive,Te=e.isNodeEmpty,Ae=e.isNodeSelection,Se=e.isNumber,Be=e.isPlainObject,we=e.isRegExp,Ne=e.isSafari,Oe=e.isString,ve=e.isTextSelection,Me=e.isiOS,Ie=e.markInputRule,qe=e.markPasteRule,s=e.mergeAttributes,Fe=e.mergeDeep,De=e.minMax,je=e.nodeInputRule,Le=e.nodePasteRule,Ke=e.objectIncludes,He=e.pasteRulesPlugin,Ge=e.posToDOMRect,ze=e.removeDuplicates,Je=e.resolveFocusPosition,Ue=e.rewriteUnknownContent,Ve=e.selectionToInsertionEnd,Ye=e.splitExtensions,We=e.textInputRule,$e=e.textPasteRule,Qe=e.textblockTypeInputRule,l=e.wrappingInputRule;var u=/^\s*>\s$/,a=r.create({name:"blockquote",addOptions(){return{HTMLAttributes:{}}},content:"block+",group:"block",defining:!0,parseHTML(){return[{tag:"blockquote"}]},renderHTML({HTMLAttributes:t}){return["blockquote",s(this.options.HTMLAttributes,t),0]},addCommands(){return{setBlockquote:()=>({commands:t})=>t.wrapIn(this.name),toggleBlockquote:()=>({commands:t})=>t.toggleWrap(this.name),unsetBlockquote:()=>({commands:t})=>t.lift(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-b":()=>this.editor.commands.toggleBlockquote()}},addInputRules(){return[l({find:u,type:this.type})]}});var d="__LEPTOS_TIPTAP_BRIDGE__";function g(){let t=globalThis,o=t[d];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[d]=i,i}function p(){return g()}function c(t){p().registerExtension(t)}var _={name:"blockquote",create:()=>a,commands:{set_blockquote:t=>t.chain().focus().setBlockquote().run(),toggle_blockquote:t=>t.chain().focus().toggleBlockquote().run(),unset_blockquote:t=>t.chain().focus().unsetBlockquote().run()},selection_keys:["blockquote"],selection_state:t=>({blockquote:t.isActive("blockquote")})};function st(){c(_)}export{st as register_blockquote}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_bold.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_bold.js index 8a3feaa0..e4426286 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_bold.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_bold.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var y=t.CommandManager,h=t.Editor,R=t.Extension,f=t.InputRule,l=t.Mark,E=t.Node,P=t.NodePos,A=t.NodeView,C=t.PasteRule,T=t.Tracker,S=t.callOrReturn,B=t.canInsertNode,N=t.combineTransactionSteps,O=t.createChainableState,w=t.createDocument,M=t.createNodeFromContent,v=t.createStyleTag,I=t.defaultBlockAt,F=t.deleteProps,D=t.elementFromString,j=t.escapeForRegEx,L=t.extensions,K=t.findChildren,H=t.findChildrenInRange,q=t.findDuplicates,G=t.findParentNode,z=t.findParentNodeClosestToPos,J=t.fromString,$=t.generateHTML,U=t.generateJSON,V=t.generateText,Y=t.getAttributes,W=t.getAttributesFromExtensions,Q=t.getChangedRanges,X=t.getDebugJSON,Z=t.getExtensionField,tt=t.getHTMLFromFragment,et=t.getMarkAttributes,nt=t.getMarkRange,ot=t.getMarkType,rt=t.getMarksBetween,it=t.getNodeAtPosition,st=t.getNodeAttributes,lt=t.getNodeType,at=t.getRenderedAttributes,dt=t.getSchema,pt=t.getSchemaByResolvedExtensions,ct=t.getSchemaTypeByName,ut=t.getSchemaTypeNameByName,gt=t.getSplittedAttributes,_t=t.getText,xt=t.getTextBetween,mt=t.getTextContentFromNodes,kt=t.getTextSerializersFromSchema,bt=t.injectExtensionAttributesToParseRule,yt=t.inputRulesPlugin,ht=t.isActive,Rt=t.isAtEndOfNode,ft=t.isAtStartOfNode,Et=t.isEmptyObject,Pt=t.isExtensionRulesEnabled,At=t.isFunction,Ct=t.isList,Tt=t.isMacOS,St=t.isMarkActive,Bt=t.isNodeActive,Nt=t.isNodeEmpty,Ot=t.isNodeSelection,wt=t.isNumber,Mt=t.isPlainObject,vt=t.isRegExp,It=t.isSafari,Ft=t.isString,Dt=t.isTextSelection,jt=t.isiOS,o=t.markInputRule,r=t.markPasteRule,a=t.mergeAttributes,Lt=t.mergeDeep,Kt=t.minMax,Ht=t.nodeInputRule,qt=t.nodePasteRule,Gt=t.objectIncludes,zt=t.pasteRulesPlugin,Jt=t.posToDOMRect,$t=t.removeDuplicates,Ut=t.resolveFocusPosition,Vt=t.rewriteUnknownContent,Yt=t.selectionToInsertionEnd,Wt=t.splitExtensions,Qt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,te=t.wrappingInputRule;var g=/(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))$/,_=/(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))/g,x=/(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))$/,m=/(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))/g,d=l.create({name:"bold",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"strong"},{tag:"b",getAttrs:e=>e.style.fontWeight!=="normal"&&null},{style:"font-weight=400",clearMark:e=>e.type.name===this.name},{style:"font-weight",getAttrs:e=>/^(bold(er)?|[5-9]\d{2,})$/.test(e)&&null}]},renderHTML({HTMLAttributes:e}){return["strong",a(this.options.HTMLAttributes,e),0]},addCommands(){return{setBold:()=>({commands:e})=>e.setMark(this.name),toggleBold:()=>({commands:e})=>e.toggleMark(this.name),unsetBold:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-b":()=>this.editor.commands.toggleBold(),"Mod-B":()=>this.editor.commands.toggleBold()}},addInputRules(){return[o({find:g,type:this.type}),o({find:x,type:this.type})]},addPasteRules(){return[r({find:_,type:this.type}),r({find:m,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function k(){let e=globalThis,i=e[p];if(i!=null)return i;let s={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[p]=s,s}function c(){return k()}function u(e){c().registerExtension(e)}var b={name:"bold",create:()=>d,commands:{set_bold:e=>e.chain().focus().setBold().run(),toggle_bold:e=>e.chain().focus().toggleBold().run(),unset_bold:e=>e.chain().focus().unsetBold().run()},selection_keys:["bold"],selection_state:e=>({bold:e.isActive("bold")})};function de(){u(b)}export{de as register_bold}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var y=t.CommandManager,h=t.Editor,f=t.Extension,R=t.InputRule,l=t.Mark,E=t.Node,P=t.NodePos,A=t.NodeView,C=t.PasteRule,T=t.Tracker,S=t.callOrReturn,B=t.canInsertNode,w=t.combineTransactionSteps,N=t.createChainableState,O=t.createDocument,M=t.createNodeFromContent,v=t.createStyleTag,I=t.defaultBlockAt,F=t.deleteProps,D=t.elementFromString,j=t.escapeForRegEx,L=t.extensions,K=t.findChildren,H=t.findChildrenInRange,q=t.findDuplicates,G=t.findParentNode,z=t.findParentNodeClosestToPos,J=t.fromString,$=t.generateHTML,U=t.generateJSON,V=t.generateText,Y=t.getAttributes,W=t.getAttributesFromExtensions,Q=t.getChangedRanges,X=t.getDebugJSON,Z=t.getExtensionField,tt=t.getHTMLFromFragment,et=t.getMarkAttributes,nt=t.getMarkRange,ot=t.getMarkType,rt=t.getMarksBetween,it=t.getNodeAtPosition,st=t.getNodeAttributes,lt=t.getNodeType,at=t.getRenderedAttributes,dt=t.getSchema,pt=t.getSchemaByResolvedExtensions,ut=t.getSchemaTypeByName,ct=t.getSchemaTypeNameByName,gt=t.getSplittedAttributes,_t=t.getText,mt=t.getTextBetween,xt=t.getTextContentFromNodes,kt=t.getTextSerializersFromSchema,bt=t.injectExtensionAttributesToParseRule,yt=t.inputRulesPlugin,ht=t.isActive,ft=t.isAtEndOfNode,Rt=t.isAtStartOfNode,Et=t.isEmptyObject,Pt=t.isExtensionRulesEnabled,At=t.isFunction,Ct=t.isList,Tt=t.isMacOS,St=t.isMarkActive,Bt=t.isNodeActive,wt=t.isNodeEmpty,Nt=t.isNodeSelection,Ot=t.isNumber,Mt=t.isPlainObject,vt=t.isRegExp,It=t.isSafari,Ft=t.isString,Dt=t.isTextSelection,jt=t.isiOS,o=t.markInputRule,r=t.markPasteRule,a=t.mergeAttributes,Lt=t.mergeDeep,Kt=t.minMax,Ht=t.nodeInputRule,qt=t.nodePasteRule,Gt=t.objectIncludes,zt=t.pasteRulesPlugin,Jt=t.posToDOMRect,$t=t.removeDuplicates,Ut=t.resolveFocusPosition,Vt=t.rewriteUnknownContent,Yt=t.selectionToInsertionEnd,Wt=t.splitExtensions,Qt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,te=t.wrappingInputRule;var g=/(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))$/,_=/(?:^|\s)(\*\*(?!\s+\*\*)((?:[^*]+))\*\*(?!\s+\*\*))/g,m=/(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))$/,x=/(?:^|\s)(__(?!\s+__)((?:[^_]+))__(?!\s+__))/g,d=l.create({name:"bold",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"strong"},{tag:"b",getAttrs:e=>e.style.fontWeight!=="normal"&&null},{style:"font-weight=400",clearMark:e=>e.type.name===this.name},{style:"font-weight",getAttrs:e=>/^(bold(er)?|[5-9]\d{2,})$/.test(e)&&null}]},renderHTML({HTMLAttributes:e}){return["strong",a(this.options.HTMLAttributes,e),0]},addCommands(){return{setBold:()=>({commands:e})=>e.setMark(this.name),toggleBold:()=>({commands:e})=>e.toggleMark(this.name),unsetBold:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-b":()=>this.editor.commands.toggleBold(),"Mod-B":()=>this.editor.commands.toggleBold()}},addInputRules(){return[o({find:g,type:this.type}),o({find:m,type:this.type})]},addPasteRules(){return[r({find:_,type:this.type}),r({find:x,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function k(){let e=globalThis,i=e[p];if(i!=null)return i;let s={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[p]=s,s}function u(){return k()}function c(e){u().registerExtension(e)}var b={name:"bold",create:()=>d,commands:{set_bold:e=>e.chain().focus().setBold().run(),toggle_bold:e=>e.chain().focus().toggleBold().run(),unset_bold:e=>e.chain().focus().unsetBold().run()},selection_keys:["bold"],selection_state:e=>({bold:e.isActive("bold")})};function de(){c(b)}export{de as register_bold}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_bullet_list.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_bullet_list.js index 92912f57..58a81207 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_bullet_list.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_bullet_list.js @@ -1 +1 @@ -var o=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(o==null||o.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=o.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,y=t.Extension,h=t.InputRule,E=t.Mark,s=t.Node,R=t.NodePos,f=t.NodeView,A=t.PasteRule,T=t.Tracker,P=t.callOrReturn,C=t.canInsertNode,S=t.combineTransactionSteps,N=t.createChainableState,B=t.createDocument,O=t.createNodeFromContent,w=t.createStyleTag,M=t.defaultBlockAt,v=t.deleteProps,I=t.elementFromString,F=t.escapeForRegEx,D=t.extensions,L=t.findChildren,j=t.findChildrenInRange,K=t.findDuplicates,H=t.findParentNode,q=t.findParentNodeClosestToPos,G=t.fromString,z=t.generateHTML,J=t.generateJSON,U=t.generateText,V=t.getAttributes,Y=t.getAttributesFromExtensions,$=t.getChangedRanges,Q=t.getDebugJSON,W=t.getExtensionField,X=t.getHTMLFromFragment,Z=t.getMarkAttributes,tt=t.getMarkRange,et=t.getMarkType,nt=t.getMarksBetween,ot=t.getNodeAtPosition,it=t.getNodeAttributes,rt=t.getNodeType,st=t.getRenderedAttributes,lt=t.getSchema,at=t.getSchemaByResolvedExtensions,pt=t.getSchemaTypeByName,dt=t.getSchemaTypeNameByName,ut=t.getSplittedAttributes,ct=t.getText,gt=t.getTextBetween,_t=t.getTextContentFromNodes,xt=t.getTextSerializersFromSchema,mt=t.injectExtensionAttributesToParseRule,kt=t.inputRulesPlugin,bt=t.isActive,yt=t.isAtEndOfNode,ht=t.isAtStartOfNode,Et=t.isEmptyObject,Rt=t.isExtensionRulesEnabled,ft=t.isFunction,At=t.isList,Tt=t.isMacOS,Pt=t.isMarkActive,Ct=t.isNodeActive,St=t.isNodeEmpty,Nt=t.isNodeSelection,Bt=t.isNumber,Ot=t.isPlainObject,wt=t.isRegExp,Mt=t.isSafari,vt=t.isString,It=t.isTextSelection,Ft=t.isiOS,Dt=t.markInputRule,Lt=t.markPasteRule,l=t.mergeAttributes,jt=t.mergeDeep,Kt=t.minMax,Ht=t.nodeInputRule,qt=t.nodePasteRule,Gt=t.objectIncludes,zt=t.pasteRulesPlugin,Jt=t.posToDOMRect,Ut=t.removeDuplicates,Vt=t.resolveFocusPosition,Yt=t.rewriteUnknownContent,$t=t.selectionToInsertionEnd,Qt=t.splitExtensions,Wt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,i=t.wrappingInputRule;var _="listItem",a="textStyle",p=/^\s*([-+*])\s$/,d=s.create({name:"bulletList",addOptions(){return{itemTypeName:"listItem",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:"block list",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:"ul"}]},renderHTML({HTMLAttributes:e}){return["ul",l(this.options.HTMLAttributes,e),0]},addCommands(){return{toggleBulletList:()=>({commands:e,chain:n})=>this.options.keepAttributes?n().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(_,this.editor.getAttributes(a)).run():e.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-8":()=>this.editor.commands.toggleBulletList()}},addInputRules(){let e=i({find:p,type:this.type});return(this.options.keepMarks||this.options.keepAttributes)&&(e=i({find:p,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:()=>this.editor.getAttributes(a),editor:this.editor})),[e]}});var u="__LEPTOS_TIPTAP_BRIDGE__";function x(){let e=globalThis,n=e[u];if(n!=null)return n;let r={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[u]=r,r}function c(){return x()}function g(e){c().registerExtension(e)}var m={name:"bullet_list",create:()=>d,commands:{toggle_bullet_list:e=>e.chain().focus().toggleBulletList().run()},selection_keys:["bullet_list"],selection_state:e=>({bullet_list:e.isActive("bulletList")})};function ae(){g(m)}export{ae as register_bullet_list}; +var o=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(o==null||o.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=o.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,y=t.Extension,h=t.InputRule,f=t.Mark,s=t.Node,E=t.NodePos,R=t.NodeView,A=t.PasteRule,T=t.Tracker,P=t.callOrReturn,C=t.canInsertNode,S=t.combineTransactionSteps,N=t.createChainableState,w=t.createDocument,B=t.createNodeFromContent,O=t.createStyleTag,M=t.defaultBlockAt,v=t.deleteProps,I=t.elementFromString,F=t.escapeForRegEx,D=t.extensions,L=t.findChildren,j=t.findChildrenInRange,K=t.findDuplicates,H=t.findParentNode,q=t.findParentNodeClosestToPos,G=t.fromString,z=t.generateHTML,J=t.generateJSON,U=t.generateText,V=t.getAttributes,Y=t.getAttributesFromExtensions,$=t.getChangedRanges,Q=t.getDebugJSON,W=t.getExtensionField,X=t.getHTMLFromFragment,Z=t.getMarkAttributes,tt=t.getMarkRange,et=t.getMarkType,nt=t.getMarksBetween,ot=t.getNodeAtPosition,it=t.getNodeAttributes,rt=t.getNodeType,st=t.getRenderedAttributes,lt=t.getSchema,at=t.getSchemaByResolvedExtensions,dt=t.getSchemaTypeByName,pt=t.getSchemaTypeNameByName,ut=t.getSplittedAttributes,ct=t.getText,gt=t.getTextBetween,_t=t.getTextContentFromNodes,mt=t.getTextSerializersFromSchema,xt=t.injectExtensionAttributesToParseRule,kt=t.inputRulesPlugin,bt=t.isActive,yt=t.isAtEndOfNode,ht=t.isAtStartOfNode,ft=t.isEmptyObject,Et=t.isExtensionRulesEnabled,Rt=t.isFunction,At=t.isList,Tt=t.isMacOS,Pt=t.isMarkActive,Ct=t.isNodeActive,St=t.isNodeEmpty,Nt=t.isNodeSelection,wt=t.isNumber,Bt=t.isPlainObject,Ot=t.isRegExp,Mt=t.isSafari,vt=t.isString,It=t.isTextSelection,Ft=t.isiOS,Dt=t.markInputRule,Lt=t.markPasteRule,l=t.mergeAttributes,jt=t.mergeDeep,Kt=t.minMax,Ht=t.nodeInputRule,qt=t.nodePasteRule,Gt=t.objectIncludes,zt=t.pasteRulesPlugin,Jt=t.posToDOMRect,Ut=t.removeDuplicates,Vt=t.resolveFocusPosition,Yt=t.rewriteUnknownContent,$t=t.selectionToInsertionEnd,Qt=t.splitExtensions,Wt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,i=t.wrappingInputRule;var _="listItem",a="textStyle",d=/^\s*([-+*])\s$/,p=s.create({name:"bulletList",addOptions(){return{itemTypeName:"listItem",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:"block list",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:"ul"}]},renderHTML({HTMLAttributes:e}){return["ul",l(this.options.HTMLAttributes,e),0]},addCommands(){return{toggleBulletList:()=>({commands:e,chain:n})=>this.options.keepAttributes?n().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(_,this.editor.getAttributes(a)).run():e.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-8":()=>this.editor.commands.toggleBulletList()}},addInputRules(){let e=i({find:d,type:this.type});return(this.options.keepMarks||this.options.keepAttributes)&&(e=i({find:d,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:()=>this.editor.getAttributes(a),editor:this.editor})),[e]}});var u="__LEPTOS_TIPTAP_BRIDGE__";function m(){let e=globalThis,n=e[u];if(n!=null)return n;let r={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[u]=r,r}function c(){return m()}function g(e){c().registerExtension(e)}var x={name:"bullet_list",create:()=>p,commands:{toggle_bullet_list:e=>e.chain().focus().toggleBulletList().run()},selection_keys:["bullet_list"],selection_state:e=>({bullet_list:e.isActive("bulletList")})};function ae(){g(x)}export{ae as register_bullet_list}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_code.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_code.js index 335668c2..94e31aae 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_code.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_code.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,y=t.Extension,h=t.InputRule,i=t.Mark,R=t.Node,E=t.NodePos,f=t.NodeView,C=t.PasteRule,P=t.Tracker,T=t.callOrReturn,A=t.canInsertNode,S=t.combineTransactionSteps,N=t.createChainableState,O=t.createDocument,B=t.createNodeFromContent,w=t.createStyleTag,M=t.defaultBlockAt,v=t.deleteProps,I=t.elementFromString,F=t.escapeForRegEx,D=t.extensions,j=t.findChildren,L=t.findChildrenInRange,K=t.findDuplicates,H=t.findParentNode,q=t.findParentNodeClosestToPos,G=t.fromString,z=t.generateHTML,J=t.generateJSON,U=t.generateText,V=t.getAttributes,Y=t.getAttributesFromExtensions,Q=t.getChangedRanges,W=t.getDebugJSON,X=t.getExtensionField,Z=t.getHTMLFromFragment,$=t.getMarkAttributes,tt=t.getMarkRange,et=t.getMarkType,nt=t.getMarksBetween,ot=t.getNodeAtPosition,rt=t.getNodeAttributes,it=t.getNodeType,st=t.getRenderedAttributes,at=t.getSchema,lt=t.getSchemaByResolvedExtensions,dt=t.getSchemaTypeByName,pt=t.getSchemaTypeNameByName,ct=t.getSplittedAttributes,ut=t.getText,gt=t.getTextBetween,_t=t.getTextContentFromNodes,xt=t.getTextSerializersFromSchema,mt=t.injectExtensionAttributesToParseRule,kt=t.inputRulesPlugin,bt=t.isActive,yt=t.isAtEndOfNode,ht=t.isAtStartOfNode,Rt=t.isEmptyObject,Et=t.isExtensionRulesEnabled,ft=t.isFunction,Ct=t.isList,Pt=t.isMacOS,Tt=t.isMarkActive,At=t.isNodeActive,St=t.isNodeEmpty,Nt=t.isNodeSelection,Ot=t.isNumber,Bt=t.isPlainObject,wt=t.isRegExp,Mt=t.isSafari,vt=t.isString,It=t.isTextSelection,Ft=t.isiOS,s=t.markInputRule,a=t.markPasteRule,l=t.mergeAttributes,Dt=t.mergeDeep,jt=t.minMax,Lt=t.nodeInputRule,Kt=t.nodePasteRule,Ht=t.objectIncludes,qt=t.pasteRulesPlugin,Gt=t.posToDOMRect,zt=t.removeDuplicates,Jt=t.resolveFocusPosition,Ut=t.rewriteUnknownContent,Vt=t.selectionToInsertionEnd,Yt=t.splitExtensions,Qt=t.textInputRule,Wt=t.textPasteRule,Xt=t.textblockTypeInputRule,Zt=t.wrappingInputRule;var g=/(^|[^`])`([^`]+)`(?!`)/,_=/(^|[^`])`([^`]+)`(?!`)/g,d=i.create({name:"code",addOptions(){return{HTMLAttributes:{}}},excludes:"_",code:!0,exitable:!0,parseHTML(){return[{tag:"code"}]},renderHTML({HTMLAttributes:e}){return["code",l(this.options.HTMLAttributes,e),0]},addCommands(){return{setCode:()=>({commands:e})=>e.setMark(this.name),toggleCode:()=>({commands:e})=>e.toggleMark(this.name),unsetCode:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-e":()=>this.editor.commands.toggleCode()}},addInputRules(){return[s({find:g,type:this.type})]},addPasteRules(){return[a({find:_,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function x(){let e=globalThis,o=e[p];if(o!=null)return o;let r={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[p]=r,r}function c(){return x()}function u(e){c().registerExtension(e)}var m={name:"code",create:()=>d,commands:{set_code:e=>e.chain().focus().setCode().run(),toggle_code:e=>e.chain().focus().toggleCode().run(),unset_code:e=>e.chain().focus().unsetCode().run()}};function ae(){u(m)}export{ae as register_code}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=e.CommandManager,b=e.Editor,y=e.Extension,h=e.InputRule,i=e.Mark,R=e.Node,E=e.NodePos,f=e.NodeView,C=e.PasteRule,P=e.Tracker,T=e.callOrReturn,A=e.canInsertNode,S=e.combineTransactionSteps,w=e.createChainableState,N=e.createDocument,O=e.createNodeFromContent,B=e.createStyleTag,M=e.defaultBlockAt,v=e.deleteProps,I=e.elementFromString,F=e.escapeForRegEx,D=e.extensions,j=e.findChildren,L=e.findChildrenInRange,K=e.findDuplicates,H=e.findParentNode,q=e.findParentNodeClosestToPos,G=e.fromString,z=e.generateHTML,J=e.generateJSON,U=e.generateText,V=e.getAttributes,Y=e.getAttributesFromExtensions,Q=e.getChangedRanges,W=e.getDebugJSON,X=e.getExtensionField,Z=e.getHTMLFromFragment,$=e.getMarkAttributes,ee=e.getMarkRange,te=e.getMarkType,ne=e.getMarksBetween,oe=e.getNodeAtPosition,re=e.getNodeAttributes,ie=e.getNodeType,se=e.getRenderedAttributes,le=e.getSchema,ae=e.getSchemaByResolvedExtensions,de=e.getSchemaTypeByName,pe=e.getSchemaTypeNameByName,ce=e.getSplittedAttributes,ue=e.getText,ge=e.getTextBetween,_e=e.getTextContentFromNodes,xe=e.getTextSerializersFromSchema,me=e.injectExtensionAttributesToParseRule,ke=e.inputRulesPlugin,be=e.isActive,ye=e.isAtEndOfNode,he=e.isAtStartOfNode,Re=e.isEmptyObject,Ee=e.isExtensionRulesEnabled,fe=e.isFunction,Ce=e.isList,Pe=e.isMacOS,Te=e.isMarkActive,Ae=e.isNodeActive,Se=e.isNodeEmpty,we=e.isNodeSelection,Ne=e.isNumber,Oe=e.isPlainObject,Be=e.isRegExp,Me=e.isSafari,ve=e.isString,Ie=e.isTextSelection,Fe=e.isiOS,s=e.markInputRule,l=e.markPasteRule,a=e.mergeAttributes,De=e.mergeDeep,je=e.minMax,Le=e.nodeInputRule,Ke=e.nodePasteRule,He=e.objectIncludes,qe=e.pasteRulesPlugin,Ge=e.posToDOMRect,ze=e.removeDuplicates,Je=e.resolveFocusPosition,Ue=e.rewriteUnknownContent,Ve=e.selectionToInsertionEnd,Ye=e.splitExtensions,Qe=e.textInputRule,We=e.textPasteRule,Xe=e.textblockTypeInputRule,Ze=e.wrappingInputRule;var g=/(^|[^`])`([^`]+)`(?!`)/,_=/(^|[^`])`([^`]+)`(?!`)/g,d=i.create({name:"code",addOptions(){return{HTMLAttributes:{}}},excludes:"_",code:!0,exitable:!0,parseHTML(){return[{tag:"code"}]},renderHTML({HTMLAttributes:t}){return["code",a(this.options.HTMLAttributes,t),0]},addCommands(){return{setCode:()=>({commands:t})=>t.setMark(this.name),toggleCode:()=>({commands:t})=>t.toggleMark(this.name),unsetCode:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-e":()=>this.editor.commands.toggleCode()}},addInputRules(){return[s({find:g,type:this.type})]},addPasteRules(){return[l({find:_,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function x(){let t=globalThis,o=t[p];if(o!=null)return o;let r={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[p]=r,r}function c(){return x()}function u(t){c().registerExtension(t)}var m={name:"code",create:()=>d,commands:{set_code:t=>t.chain().focus().setCode().run(),toggle_code:t=>t.chain().focus().toggleCode().run(),unset_code:t=>t.chain().focus().unsetCode().run()}};function lt(){u(m)}export{lt as register_code}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_code_block.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_code_block.js index 3ce13b8e..635ed84c 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_code_block.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_code_block.js @@ -1,4 +1,4 @@ -var p=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(p==null||p.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=p.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var B=e.CommandManager,O=e.Editor,w=e.Extension,v=e.InputRule,M=e.Mark,x=e.Node,D=e.NodePos,I=e.NodeView,F=e.PasteRule,j=e.Tracker,L=e.callOrReturn,K=e.canInsertNode,H=e.combineTransactionSteps,G=e.createChainableState,q=e.createDocument,z=e.createNodeFromContent,$=e.createStyleTag,J=e.defaultBlockAt,W=e.deleteProps,V=e.elementFromString,U=e.escapeForRegEx,Y=e.extensions,Q=e.findChildren,X=e.findChildrenInRange,Z=e.findDuplicates,ee=e.findParentNode,te=e.findParentNodeClosestToPos,ne=e.fromString,oe=e.generateHTML,re=e.generateJSON,ie=e.generateText,se=e.getAttributes,ae=e.getAttributesFromExtensions,le=e.getChangedRanges,de=e.getDebugJSON,pe=e.getExtensionField,ce=e.getHTMLFromFragment,ue=e.getMarkAttributes,ge=e.getMarkRange,xe=e.getMarkType,_e=e.getMarksBetween,me=e.getNodeAtPosition,ke=e.getNodeAttributes,be=e.getNodeType,ye=e.getRenderedAttributes,fe=e.getSchema,he=e.getSchemaByResolvedExtensions,Ee=e.getSchemaTypeByName,Se=e.getSchemaTypeNameByName,Pe=e.getSplittedAttributes,Ce=e.getText,Ae=e.getTextBetween,Re=e.getTextContentFromNodes,Te=e.getTextSerializersFromSchema,Ne=e.injectExtensionAttributesToParseRule,Be=e.inputRulesPlugin,Oe=e.isActive,we=e.isAtEndOfNode,ve=e.isAtStartOfNode,Me=e.isEmptyObject,De=e.isExtensionRulesEnabled,Ie=e.isFunction,Fe=e.isList,je=e.isMacOS,Le=e.isMarkActive,Ke=e.isNodeActive,He=e.isNodeEmpty,Ge=e.isNodeSelection,qe=e.isNumber,ze=e.isPlainObject,$e=e.isRegExp,Je=e.isSafari,We=e.isString,Ve=e.isTextSelection,Ue=e.isiOS,Ye=e.markInputRule,Qe=e.markPasteRule,_=e.mergeAttributes,Xe=e.mergeDeep,Ze=e.minMax,et=e.nodeInputRule,tt=e.nodePasteRule,nt=e.objectIncludes,ot=e.pasteRulesPlugin,rt=e.posToDOMRect,it=e.removeDuplicates,st=e.resolveFocusPosition,at=e.rewriteUnknownContent,lt=e.selectionToInsertionEnd,dt=e.splitExtensions,pt=e.textInputRule,ct=e.textPasteRule,c=e.textblockTypeInputRule,ut=e.wrappingInputRule;var u=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(u==null||u.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var a=u.modules["@tiptap/pm/state"];if(a==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/state" is unavailable');var xt=a.AllSelection,_t=a.EditorState,mt=a.NodeSelection,m=a.Plugin,k=a.PluginKey,b=a.Selection,kt=a.SelectionRange,y=a.TextSelection,bt=a.Transaction;var A=/^```([a-z]+)?[\s\n]$/,R=/^~~~([a-z]+)?[\s\n]$/,f=x.create({name:"codeBlock",addOptions(){return{languageClassPrefix:"language-",exitOnTripleEnter:!0,exitOnArrowDown:!0,defaultLanguage:null,HTMLAttributes:{}}},content:"text*",marks:"",group:"block",code:!0,defining:!0,addAttributes(){return{language:{default:this.options.defaultLanguage,parseHTML:t=>{var n;let{languageClassPrefix:o}=this.options,l=[...((n=t.firstElementChild)===null||n===void 0?void 0:n.classList)||[]].filter(r=>r.startsWith(o)).map(r=>r.replace(o,""))[0];return l||null},rendered:!1}}},parseHTML(){return[{tag:"pre",preserveWhitespace:"full"}]},renderHTML({node:t,HTMLAttributes:n}){return["pre",_(this.options.HTMLAttributes,n),["code",{class:t.attrs.language?this.options.languageClassPrefix+t.attrs.language:null},0]]},addCommands(){return{setCodeBlock:t=>({commands:n})=>n.setNode(this.name,t),toggleCodeBlock:t=>({commands:n})=>n.toggleNode(this.name,"paragraph",t)}},addKeyboardShortcuts(){return{"Mod-Alt-c":()=>this.editor.commands.toggleCodeBlock(),Backspace:()=>{let{empty:t,$anchor:n}=this.editor.state.selection,o=n.pos===1;return!t||n.parent.type.name!==this.name?!1:o||!n.parent.textContent.length?this.editor.commands.clearNodes():!1},Enter:({editor:t})=>{if(!this.options.exitOnTripleEnter)return!1;let{state:n}=t,{selection:o}=n,{$from:i,empty:s}=o;if(!s||i.parent.type!==this.type)return!1;let l=i.parentOffset===i.parent.nodeSize-2,r=i.parent.textContent.endsWith(` +var p=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(p==null||p.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=p.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var N=e.CommandManager,B=e.Editor,O=e.Extension,v=e.InputRule,M=e.Mark,_=e.Node,D=e.NodePos,I=e.NodeView,F=e.PasteRule,j=e.Tracker,L=e.callOrReturn,K=e.canInsertNode,H=e.combineTransactionSteps,G=e.createChainableState,q=e.createDocument,z=e.createNodeFromContent,$=e.createStyleTag,J=e.defaultBlockAt,W=e.deleteProps,V=e.elementFromString,U=e.escapeForRegEx,Y=e.extensions,Q=e.findChildren,X=e.findChildrenInRange,Z=e.findDuplicates,ee=e.findParentNode,te=e.findParentNodeClosestToPos,ne=e.fromString,oe=e.generateHTML,re=e.generateJSON,ie=e.generateText,se=e.getAttributes,le=e.getAttributesFromExtensions,ae=e.getChangedRanges,de=e.getDebugJSON,pe=e.getExtensionField,ce=e.getHTMLFromFragment,ue=e.getMarkAttributes,ge=e.getMarkRange,_e=e.getMarkType,xe=e.getMarksBetween,me=e.getNodeAtPosition,ke=e.getNodeAttributes,be=e.getNodeType,ye=e.getRenderedAttributes,fe=e.getSchema,he=e.getSchemaByResolvedExtensions,Ee=e.getSchemaTypeByName,Se=e.getSchemaTypeNameByName,Pe=e.getSplittedAttributes,Ce=e.getText,Ae=e.getTextBetween,Re=e.getTextContentFromNodes,Te=e.getTextSerializersFromSchema,we=e.injectExtensionAttributesToParseRule,Ne=e.inputRulesPlugin,Be=e.isActive,Oe=e.isAtEndOfNode,ve=e.isAtStartOfNode,Me=e.isEmptyObject,De=e.isExtensionRulesEnabled,Ie=e.isFunction,Fe=e.isList,je=e.isMacOS,Le=e.isMarkActive,Ke=e.isNodeActive,He=e.isNodeEmpty,Ge=e.isNodeSelection,qe=e.isNumber,ze=e.isPlainObject,$e=e.isRegExp,Je=e.isSafari,We=e.isString,Ve=e.isTextSelection,Ue=e.isiOS,Ye=e.markInputRule,Qe=e.markPasteRule,x=e.mergeAttributes,Xe=e.mergeDeep,Ze=e.minMax,et=e.nodeInputRule,tt=e.nodePasteRule,nt=e.objectIncludes,ot=e.pasteRulesPlugin,rt=e.posToDOMRect,it=e.removeDuplicates,st=e.resolveFocusPosition,lt=e.rewriteUnknownContent,at=e.selectionToInsertionEnd,dt=e.splitExtensions,pt=e.textInputRule,ct=e.textPasteRule,c=e.textblockTypeInputRule,ut=e.wrappingInputRule;var u=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(u==null||u.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var l=u.modules["@tiptap/pm/state"];if(l==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/state" is unavailable');var _t=l.AllSelection,xt=l.EditorState,mt=l.NodeSelection,m=l.Plugin,k=l.PluginKey,b=l.Selection,kt=l.SelectionRange,y=l.TextSelection,bt=l.Transaction;var A=/^```([a-z]+)?[\s\n]$/,R=/^~~~([a-z]+)?[\s\n]$/,f=_.create({name:"codeBlock",addOptions(){return{languageClassPrefix:"language-",exitOnTripleEnter:!0,exitOnArrowDown:!0,defaultLanguage:null,HTMLAttributes:{}}},content:"text*",marks:"",group:"block",code:!0,defining:!0,addAttributes(){return{language:{default:this.options.defaultLanguage,parseHTML:t=>{var n;let{languageClassPrefix:o}=this.options,a=[...((n=t.firstElementChild)===null||n===void 0?void 0:n.classList)||[]].filter(r=>r.startsWith(o)).map(r=>r.replace(o,""))[0];return a||null},rendered:!1}}},parseHTML(){return[{tag:"pre",preserveWhitespace:"full"}]},renderHTML({node:t,HTMLAttributes:n}){return["pre",x(this.options.HTMLAttributes,n),["code",{class:t.attrs.language?this.options.languageClassPrefix+t.attrs.language:null},0]]},addCommands(){return{setCodeBlock:t=>({commands:n})=>n.setNode(this.name,t),toggleCodeBlock:t=>({commands:n})=>n.toggleNode(this.name,"paragraph",t)}},addKeyboardShortcuts(){return{"Mod-Alt-c":()=>this.editor.commands.toggleCodeBlock(),Backspace:()=>{let{empty:t,$anchor:n}=this.editor.state.selection,o=n.pos===1;return!t||n.parent.type.name!==this.name?!1:o||!n.parent.textContent.length?this.editor.commands.clearNodes():!1},Enter:({editor:t})=>{if(!this.options.exitOnTripleEnter)return!1;let{state:n}=t,{selection:o}=n,{$from:i,empty:s}=o;if(!s||i.parent.type!==this.type)return!1;let a=i.parentOffset===i.parent.nodeSize-2,r=i.parent.textContent.endsWith(` -`);return!l||!r?!1:t.chain().command(({tr:d})=>(d.delete(i.pos-2,i.pos),!0)).exitCode().run()},ArrowDown:({editor:t})=>{if(!this.options.exitOnArrowDown)return!1;let{state:n}=t,{selection:o,doc:i}=n,{$from:s,empty:l}=o;if(!l||s.parent.type!==this.type||!(s.parentOffset===s.parent.nodeSize-2))return!1;let d=s.after();return d===void 0?!1:i.nodeAt(d)?t.commands.command(({tr:C})=>(C.setSelection(b.near(i.resolve(d))),!0)):t.commands.exitCode()}}},addInputRules(){return[c({find:A,type:this.type,getAttributes:t=>({language:t[1]})}),c({find:R,type:this.type,getAttributes:t=>({language:t[1]})})]},addProseMirrorPlugins(){return[new m({key:new k("codeBlockVSCodeHandler"),props:{handlePaste:(t,n)=>{if(!n.clipboardData||this.editor.isActive(this.type.name))return!1;let o=n.clipboardData.getData("text/plain"),i=n.clipboardData.getData("vscode-editor-data"),s=i?JSON.parse(i):void 0,l=s?.mode;if(!o||!l)return!1;let{tr:r,schema:d}=t.state,g=d.text(o.replace(/\r\n?/g,` -`));return r.replaceSelectionWith(this.type.create({language:l},g)),r.selection.$from.parent.type!==this.type&&r.setSelection(y.near(r.doc.resolve(Math.max(0,r.selection.from-2)))),r.setMeta("paste",!0),t.dispatch(r),!0}}})]}});var h="__LEPTOS_TIPTAP_BRIDGE__";function T(){let t=globalThis,n=t[h];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[h]=o,o}function E(){return T()}function S(t){E().registerExtension(t)}function P(t){if(t?.language!=null)return{language:t.language}}var N={name:"code_block",create:()=>f,commands:{set_code_block:(t,n)=>n.kind==="set_code_block"?t.chain().focus().setCodeBlock(P(n.attributes)).run():!1,toggle_code_block:(t,n)=>n.kind==="toggle_code_block"?t.chain().focus().toggleCodeBlock(P(n.attributes)).run():!1}};function Tt(){S(N)}export{Tt as register_code_block}; +`);return!a||!r?!1:t.chain().command(({tr:d})=>(d.delete(i.pos-2,i.pos),!0)).exitCode().run()},ArrowDown:({editor:t})=>{if(!this.options.exitOnArrowDown)return!1;let{state:n}=t,{selection:o,doc:i}=n,{$from:s,empty:a}=o;if(!a||s.parent.type!==this.type||!(s.parentOffset===s.parent.nodeSize-2))return!1;let d=s.after();return d===void 0?!1:i.nodeAt(d)?t.commands.command(({tr:C})=>(C.setSelection(b.near(i.resolve(d))),!0)):t.commands.exitCode()}}},addInputRules(){return[c({find:A,type:this.type,getAttributes:t=>({language:t[1]})}),c({find:R,type:this.type,getAttributes:t=>({language:t[1]})})]},addProseMirrorPlugins(){return[new m({key:new k("codeBlockVSCodeHandler"),props:{handlePaste:(t,n)=>{if(!n.clipboardData||this.editor.isActive(this.type.name))return!1;let o=n.clipboardData.getData("text/plain"),i=n.clipboardData.getData("vscode-editor-data"),s=i?JSON.parse(i):void 0,a=s?.mode;if(!o||!a)return!1;let{tr:r,schema:d}=t.state,g=d.text(o.replace(/\r\n?/g,` +`));return r.replaceSelectionWith(this.type.create({language:a},g)),r.selection.$from.parent.type!==this.type&&r.setSelection(y.near(r.doc.resolve(Math.max(0,r.selection.from-2)))),r.setMeta("paste",!0),t.dispatch(r),!0}}})]}});var h="__LEPTOS_TIPTAP_BRIDGE__";function T(){let t=globalThis,n=t[h];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[h]=o,o}function E(){return T()}function S(t){E().registerExtension(t)}function P(t){if(t?.language!=null)return{language:t.language}}var w={name:"code_block",create:()=>f,commands:{set_code_block:(t,n)=>n.kind==="set_code_block"?t.chain().focus().setCodeBlock(P(n.attributes)).run():!1,toggle_code_block:(t,n)=>n.kind==="toggle_code_block"?t.chain().focus().toggleCodeBlock(P(n.attributes)).run():!1}};function Tt(){S(w)}export{Tt as register_code_block}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_document.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_document.js index 9948098d..824c75e2 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_document.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_document.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var u=t.CommandManager,g=t.Editor,_=t.Extension,x=t.InputRule,m=t.Mark,r=t.Node,k=t.NodePos,b=t.NodeView,y=t.PasteRule,E=t.Tracker,R=t.callOrReturn,h=t.canInsertNode,f=t.combineTransactionSteps,P=t.createChainableState,C=t.createDocument,S=t.createNodeFromContent,T=t.createStyleTag,A=t.defaultBlockAt,N=t.deleteProps,O=t.elementFromString,B=t.escapeForRegEx,w=t.extensions,v=t.findChildren,I=t.findChildrenInRange,M=t.findDuplicates,D=t.findParentNode,F=t.findParentNodeClosestToPos,j=t.fromString,L=t.generateHTML,K=t.generateJSON,q=t.generateText,G=t.getAttributes,H=t.getAttributesFromExtensions,z=t.getChangedRanges,J=t.getDebugJSON,U=t.getExtensionField,V=t.getHTMLFromFragment,Y=t.getMarkAttributes,Q=t.getMarkRange,W=t.getMarkType,X=t.getMarksBetween,Z=t.getNodeAtPosition,$=t.getNodeAttributes,tt=t.getNodeType,et=t.getRenderedAttributes,nt=t.getSchema,ot=t.getSchemaByResolvedExtensions,it=t.getSchemaTypeByName,rt=t.getSchemaTypeNameByName,st=t.getSplittedAttributes,lt=t.getText,at=t.getTextBetween,dt=t.getTextContentFromNodes,pt=t.getTextSerializersFromSchema,ct=t.injectExtensionAttributesToParseRule,ut=t.inputRulesPlugin,gt=t.isActive,_t=t.isAtEndOfNode,xt=t.isAtStartOfNode,mt=t.isEmptyObject,kt=t.isExtensionRulesEnabled,bt=t.isFunction,yt=t.isList,Et=t.isMacOS,Rt=t.isMarkActive,ht=t.isNodeActive,ft=t.isNodeEmpty,Pt=t.isNodeSelection,Ct=t.isNumber,St=t.isPlainObject,Tt=t.isRegExp,At=t.isSafari,Nt=t.isString,Ot=t.isTextSelection,Bt=t.isiOS,wt=t.markInputRule,vt=t.markPasteRule,It=t.mergeAttributes,Mt=t.mergeDeep,Dt=t.minMax,Ft=t.nodeInputRule,jt=t.nodePasteRule,Lt=t.objectIncludes,Kt=t.pasteRulesPlugin,qt=t.posToDOMRect,Gt=t.removeDuplicates,Ht=t.resolveFocusPosition,zt=t.rewriteUnknownContent,Jt=t.selectionToInsertionEnd,Ut=t.splitExtensions,Vt=t.textInputRule,Yt=t.textPasteRule,Qt=t.textblockTypeInputRule,Wt=t.wrappingInputRule;var s=r.create({name:"doc",topNode:!0,content:"block+"});var l="__LEPTOS_TIPTAP_BRIDGE__";function p(){let e=globalThis,o=e[l];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[l]=i,i}function a(){return p()}function d(e){a().registerExtension(e)}var c={name:"document",create:()=>s};function re(){d(c)}export{re as register_document}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var u=e.CommandManager,g=e.Editor,_=e.Extension,x=e.InputRule,m=e.Mark,r=e.Node,k=e.NodePos,b=e.NodeView,y=e.PasteRule,E=e.Tracker,h=e.callOrReturn,R=e.canInsertNode,f=e.combineTransactionSteps,P=e.createChainableState,C=e.createDocument,S=e.createNodeFromContent,T=e.createStyleTag,A=e.defaultBlockAt,w=e.deleteProps,N=e.elementFromString,O=e.escapeForRegEx,B=e.extensions,v=e.findChildren,I=e.findChildrenInRange,M=e.findDuplicates,D=e.findParentNode,F=e.findParentNodeClosestToPos,j=e.fromString,L=e.generateHTML,K=e.generateJSON,q=e.generateText,G=e.getAttributes,H=e.getAttributesFromExtensions,z=e.getChangedRanges,J=e.getDebugJSON,U=e.getExtensionField,V=e.getHTMLFromFragment,Y=e.getMarkAttributes,Q=e.getMarkRange,W=e.getMarkType,X=e.getMarksBetween,Z=e.getNodeAtPosition,$=e.getNodeAttributes,ee=e.getNodeType,te=e.getRenderedAttributes,ne=e.getSchema,oe=e.getSchemaByResolvedExtensions,ie=e.getSchemaTypeByName,re=e.getSchemaTypeNameByName,se=e.getSplittedAttributes,le=e.getText,ae=e.getTextBetween,de=e.getTextContentFromNodes,pe=e.getTextSerializersFromSchema,ce=e.injectExtensionAttributesToParseRule,ue=e.inputRulesPlugin,ge=e.isActive,_e=e.isAtEndOfNode,xe=e.isAtStartOfNode,me=e.isEmptyObject,ke=e.isExtensionRulesEnabled,be=e.isFunction,ye=e.isList,Ee=e.isMacOS,he=e.isMarkActive,Re=e.isNodeActive,fe=e.isNodeEmpty,Pe=e.isNodeSelection,Ce=e.isNumber,Se=e.isPlainObject,Te=e.isRegExp,Ae=e.isSafari,we=e.isString,Ne=e.isTextSelection,Oe=e.isiOS,Be=e.markInputRule,ve=e.markPasteRule,Ie=e.mergeAttributes,Me=e.mergeDeep,De=e.minMax,Fe=e.nodeInputRule,je=e.nodePasteRule,Le=e.objectIncludes,Ke=e.pasteRulesPlugin,qe=e.posToDOMRect,Ge=e.removeDuplicates,He=e.resolveFocusPosition,ze=e.rewriteUnknownContent,Je=e.selectionToInsertionEnd,Ue=e.splitExtensions,Ve=e.textInputRule,Ye=e.textPasteRule,Qe=e.textblockTypeInputRule,We=e.wrappingInputRule;var s=r.create({name:"doc",topNode:!0,content:"block+"});var l="__LEPTOS_TIPTAP_BRIDGE__";function p(){let t=globalThis,o=t[l];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[l]=i,i}function a(){return p()}function d(t){a().registerExtension(t)}var c={name:"document",create:()=>s};function rt(){d(c)}export{rt as register_document}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_dropcursor.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_dropcursor.js index 2e21e1dc..2260bd87 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_dropcursor.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_dropcursor.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var x=t.CommandManager,m=t.Editor,s=t.Extension,k=t.InputRule,b=t.Mark,y=t.Node,E=t.NodePos,h=t.NodeView,R=t.PasteRule,P=t.Tracker,f=t.callOrReturn,C=t.canInsertNode,T=t.combineTransactionSteps,S=t.createChainableState,A=t.createDocument,O=t.createNodeFromContent,N=t.createStyleTag,w=t.defaultBlockAt,B=t.deleteProps,v=t.elementFromString,I=t.escapeForRegEx,M=t.extensions,D=t.findChildren,F=t.findChildrenInRange,j=t.findDuplicates,L=t.findParentNode,K=t.findParentNodeClosestToPos,G=t.fromString,q=t.generateHTML,H=t.generateJSON,z=t.generateText,J=t.getAttributes,U=t.getAttributesFromExtensions,V=t.getChangedRanges,Y=t.getDebugJSON,Q=t.getExtensionField,W=t.getHTMLFromFragment,X=t.getMarkAttributes,Z=t.getMarkRange,$=t.getMarkType,tt=t.getMarksBetween,et=t.getNodeAtPosition,nt=t.getNodeAttributes,ot=t.getNodeType,rt=t.getRenderedAttributes,it=t.getSchema,st=t.getSchemaByResolvedExtensions,lt=t.getSchemaTypeByName,at=t.getSchemaTypeNameByName,pt=t.getSplittedAttributes,dt=t.getText,ct=t.getTextBetween,ut=t.getTextContentFromNodes,gt=t.getTextSerializersFromSchema,_t=t.injectExtensionAttributesToParseRule,xt=t.inputRulesPlugin,mt=t.isActive,kt=t.isAtEndOfNode,bt=t.isAtStartOfNode,yt=t.isEmptyObject,Et=t.isExtensionRulesEnabled,ht=t.isFunction,Rt=t.isList,Pt=t.isMacOS,ft=t.isMarkActive,Ct=t.isNodeActive,Tt=t.isNodeEmpty,St=t.isNodeSelection,At=t.isNumber,Ot=t.isPlainObject,Nt=t.isRegExp,wt=t.isSafari,Bt=t.isString,vt=t.isTextSelection,It=t.isiOS,Mt=t.markInputRule,Dt=t.markPasteRule,Ft=t.mergeAttributes,jt=t.mergeDeep,Lt=t.minMax,Kt=t.nodeInputRule,Gt=t.nodePasteRule,qt=t.objectIncludes,Ht=t.pasteRulesPlugin,zt=t.posToDOMRect,Jt=t.removeDuplicates,Ut=t.resolveFocusPosition,Vt=t.rewriteUnknownContent,Yt=t.selectionToInsertionEnd,Qt=t.splitExtensions,Wt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,$t=t.wrappingInputRule;var o=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(o==null||o.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var l=o.modules["@tiptap/pm/dropcursor"];if(l==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/dropcursor" is unavailable');var a=l.dropCursor;var p=s.create({name:"dropCursor",addOptions(){return{color:"currentColor",width:1,class:void 0}},addProseMirrorPlugins(){return[a(this.options)]}});var d="__LEPTOS_TIPTAP_BRIDGE__";function g(){let e=globalThis,r=e[d];if(r!=null)return r;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[d]=i,i}function c(){return g()}function u(e){c().registerExtension(e)}var _={name:"dropcursor",create:()=>p};function de(){u(_)}export{de as register_dropcursor}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var x=e.CommandManager,m=e.Editor,s=e.Extension,k=e.InputRule,b=e.Mark,y=e.Node,E=e.NodePos,h=e.NodeView,f=e.PasteRule,R=e.Tracker,P=e.callOrReturn,C=e.canInsertNode,T=e.combineTransactionSteps,S=e.createChainableState,A=e.createDocument,w=e.createNodeFromContent,O=e.createStyleTag,N=e.defaultBlockAt,B=e.deleteProps,v=e.elementFromString,I=e.escapeForRegEx,M=e.extensions,D=e.findChildren,F=e.findChildrenInRange,j=e.findDuplicates,L=e.findParentNode,K=e.findParentNodeClosestToPos,G=e.fromString,q=e.generateHTML,H=e.generateJSON,z=e.generateText,J=e.getAttributes,U=e.getAttributesFromExtensions,V=e.getChangedRanges,Y=e.getDebugJSON,Q=e.getExtensionField,W=e.getHTMLFromFragment,X=e.getMarkAttributes,Z=e.getMarkRange,$=e.getMarkType,ee=e.getMarksBetween,te=e.getNodeAtPosition,ne=e.getNodeAttributes,oe=e.getNodeType,re=e.getRenderedAttributes,ie=e.getSchema,se=e.getSchemaByResolvedExtensions,le=e.getSchemaTypeByName,ae=e.getSchemaTypeNameByName,de=e.getSplittedAttributes,pe=e.getText,ce=e.getTextBetween,ue=e.getTextContentFromNodes,ge=e.getTextSerializersFromSchema,_e=e.injectExtensionAttributesToParseRule,xe=e.inputRulesPlugin,me=e.isActive,ke=e.isAtEndOfNode,be=e.isAtStartOfNode,ye=e.isEmptyObject,Ee=e.isExtensionRulesEnabled,he=e.isFunction,fe=e.isList,Re=e.isMacOS,Pe=e.isMarkActive,Ce=e.isNodeActive,Te=e.isNodeEmpty,Se=e.isNodeSelection,Ae=e.isNumber,we=e.isPlainObject,Oe=e.isRegExp,Ne=e.isSafari,Be=e.isString,ve=e.isTextSelection,Ie=e.isiOS,Me=e.markInputRule,De=e.markPasteRule,Fe=e.mergeAttributes,je=e.mergeDeep,Le=e.minMax,Ke=e.nodeInputRule,Ge=e.nodePasteRule,qe=e.objectIncludes,He=e.pasteRulesPlugin,ze=e.posToDOMRect,Je=e.removeDuplicates,Ue=e.resolveFocusPosition,Ve=e.rewriteUnknownContent,Ye=e.selectionToInsertionEnd,Qe=e.splitExtensions,We=e.textInputRule,Xe=e.textPasteRule,Ze=e.textblockTypeInputRule,$e=e.wrappingInputRule;var o=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(o==null||o.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var l=o.modules["@tiptap/pm/dropcursor"];if(l==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/dropcursor" is unavailable');var a=l.dropCursor;var d=s.create({name:"dropCursor",addOptions(){return{color:"currentColor",width:1,class:void 0}},addProseMirrorPlugins(){return[a(this.options)]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function g(){let t=globalThis,r=t[p];if(r!=null)return r;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[p]=i,i}function c(){return g()}function u(t){c().registerExtension(t)}var _={name:"dropcursor",create:()=>d};function pt(){u(_)}export{pt as register_dropcursor}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_gapcursor.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_gapcursor.js index 1bc9f17c..2bfc2662 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_gapcursor.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_gapcursor.js @@ -1 +1 @@ -var r=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(r==null||r.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=r.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,a=t.Extension,y=t.InputRule,E=t.Mark,R=t.Node,h=t.NodePos,P=t.NodeView,f=t.PasteRule,C=t.Tracker,l=t.callOrReturn,T=t.canInsertNode,S=t.combineTransactionSteps,A=t.createChainableState,N=t.createDocument,O=t.createNodeFromContent,w=t.createStyleTag,B=t.defaultBlockAt,v=t.deleteProps,I=t.elementFromString,M=t.escapeForRegEx,F=t.extensions,D=t.findChildren,j=t.findChildrenInRange,G=t.findDuplicates,L=t.findParentNode,K=t.findParentNodeClosestToPos,q=t.fromString,H=t.generateHTML,z=t.generateJSON,J=t.generateText,U=t.getAttributes,V=t.getAttributesFromExtensions,Y=t.getChangedRanges,Q=t.getDebugJSON,p=t.getExtensionField,W=t.getHTMLFromFragment,X=t.getMarkAttributes,Z=t.getMarkRange,$=t.getMarkType,tt=t.getMarksBetween,et=t.getNodeAtPosition,nt=t.getNodeAttributes,ot=t.getNodeType,rt=t.getRenderedAttributes,it=t.getSchema,st=t.getSchemaByResolvedExtensions,at=t.getSchemaTypeByName,lt=t.getSchemaTypeNameByName,pt=t.getSplittedAttributes,dt=t.getText,ct=t.getTextBetween,ut=t.getTextContentFromNodes,gt=t.getTextSerializersFromSchema,_t=t.injectExtensionAttributesToParseRule,xt=t.inputRulesPlugin,mt=t.isActive,kt=t.isAtEndOfNode,bt=t.isAtStartOfNode,yt=t.isEmptyObject,Et=t.isExtensionRulesEnabled,Rt=t.isFunction,ht=t.isList,Pt=t.isMacOS,ft=t.isMarkActive,Ct=t.isNodeActive,Tt=t.isNodeEmpty,St=t.isNodeSelection,At=t.isNumber,Nt=t.isPlainObject,Ot=t.isRegExp,wt=t.isSafari,Bt=t.isString,vt=t.isTextSelection,It=t.isiOS,Mt=t.markInputRule,Ft=t.markPasteRule,Dt=t.mergeAttributes,jt=t.mergeDeep,Gt=t.minMax,Lt=t.nodeInputRule,Kt=t.nodePasteRule,qt=t.objectIncludes,Ht=t.pasteRulesPlugin,zt=t.posToDOMRect,Jt=t.removeDuplicates,Ut=t.resolveFocusPosition,Vt=t.rewriteUnknownContent,Yt=t.selectionToInsertionEnd,Qt=t.splitExtensions,Wt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,$t=t.wrappingInputRule;var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var s=i.modules["@tiptap/pm/gapcursor"];if(s==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/gapcursor" is unavailable');var ee=s.GapCursor,d=s.gapCursor;var c=a.create({name:"gapCursor",addProseMirrorPlugins(){return[d()]},extendNodeSchema(e){var n;let o={name:e.name,options:e.options,storage:e.storage};return{allowGapCursor:(n=l(p(e,"allowGapCursor",o)))!==null&&n!==void 0?n:null}}});var u="__LEPTOS_TIPTAP_BRIDGE__";function x(){let e=globalThis,n=e[u];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[u]=o,o}function g(){return x()}function _(e){g().registerExtension(e)}var m={name:"gapcursor",create:()=>c};function ce(){_(m)}export{ce as register_gapcursor}; +var r=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(r==null||r.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=r.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=e.CommandManager,b=e.Editor,l=e.Extension,y=e.InputRule,E=e.Mark,h=e.Node,f=e.NodePos,R=e.NodeView,P=e.PasteRule,C=e.Tracker,a=e.callOrReturn,T=e.canInsertNode,S=e.combineTransactionSteps,A=e.createChainableState,w=e.createDocument,N=e.createNodeFromContent,O=e.createStyleTag,B=e.defaultBlockAt,v=e.deleteProps,I=e.elementFromString,M=e.escapeForRegEx,F=e.extensions,D=e.findChildren,j=e.findChildrenInRange,G=e.findDuplicates,L=e.findParentNode,K=e.findParentNodeClosestToPos,q=e.fromString,H=e.generateHTML,z=e.generateJSON,J=e.generateText,U=e.getAttributes,V=e.getAttributesFromExtensions,Y=e.getChangedRanges,Q=e.getDebugJSON,d=e.getExtensionField,W=e.getHTMLFromFragment,X=e.getMarkAttributes,Z=e.getMarkRange,$=e.getMarkType,ee=e.getMarksBetween,te=e.getNodeAtPosition,ne=e.getNodeAttributes,oe=e.getNodeType,re=e.getRenderedAttributes,ie=e.getSchema,se=e.getSchemaByResolvedExtensions,le=e.getSchemaTypeByName,ae=e.getSchemaTypeNameByName,de=e.getSplittedAttributes,pe=e.getText,ce=e.getTextBetween,ue=e.getTextContentFromNodes,ge=e.getTextSerializersFromSchema,_e=e.injectExtensionAttributesToParseRule,xe=e.inputRulesPlugin,me=e.isActive,ke=e.isAtEndOfNode,be=e.isAtStartOfNode,ye=e.isEmptyObject,Ee=e.isExtensionRulesEnabled,he=e.isFunction,fe=e.isList,Re=e.isMacOS,Pe=e.isMarkActive,Ce=e.isNodeActive,Te=e.isNodeEmpty,Se=e.isNodeSelection,Ae=e.isNumber,we=e.isPlainObject,Ne=e.isRegExp,Oe=e.isSafari,Be=e.isString,ve=e.isTextSelection,Ie=e.isiOS,Me=e.markInputRule,Fe=e.markPasteRule,De=e.mergeAttributes,je=e.mergeDeep,Ge=e.minMax,Le=e.nodeInputRule,Ke=e.nodePasteRule,qe=e.objectIncludes,He=e.pasteRulesPlugin,ze=e.posToDOMRect,Je=e.removeDuplicates,Ue=e.resolveFocusPosition,Ve=e.rewriteUnknownContent,Ye=e.selectionToInsertionEnd,Qe=e.splitExtensions,We=e.textInputRule,Xe=e.textPasteRule,Ze=e.textblockTypeInputRule,$e=e.wrappingInputRule;var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var s=i.modules["@tiptap/pm/gapcursor"];if(s==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/gapcursor" is unavailable');var tt=s.GapCursor,p=s.gapCursor;var c=l.create({name:"gapCursor",addProseMirrorPlugins(){return[p()]},extendNodeSchema(t){var n;let o={name:t.name,options:t.options,storage:t.storage};return{allowGapCursor:(n=a(d(t,"allowGapCursor",o)))!==null&&n!==void 0?n:null}}});var u="__LEPTOS_TIPTAP_BRIDGE__";function x(){let t=globalThis,n=t[u];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[u]=o,o}function g(){return x()}function _(t){g().registerExtension(t)}var m={name:"gapcursor",create:()=>c};function ct(){_(m)}export{ct as register_gapcursor}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_hard_break.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_hard_break.js index 1f14707b..3da120f6 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_hard_break.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_hard_break.js @@ -1,2 +1,2 @@ -var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=i.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var R=t.CommandManager,P=t.Editor,C=t.Extension,T=t.InputRule,S=t.Mark,a=t.Node,A=t.NodePos,B=t.NodeView,N=t.PasteRule,O=t.Tracker,M=t.callOrReturn,w=t.canInsertNode,v=t.combineTransactionSteps,I=t.createChainableState,F=t.createDocument,D=t.createNodeFromContent,j=t.createStyleTag,H=t.defaultBlockAt,L=t.deleteProps,K=t.elementFromString,q=t.escapeForRegEx,G=t.extensions,z=t.findChildren,J=t.findChildrenInRange,$=t.findDuplicates,U=t.findParentNode,V=t.findParentNodeClosestToPos,Y=t.fromString,Q=t.generateHTML,W=t.generateJSON,X=t.generateText,Z=t.getAttributes,tt=t.getAttributesFromExtensions,et=t.getChangedRanges,nt=t.getDebugJSON,ot=t.getExtensionField,rt=t.getHTMLFromFragment,it=t.getMarkAttributes,st=t.getMarkRange,at=t.getMarkType,lt=t.getMarksBetween,dt=t.getNodeAtPosition,pt=t.getNodeAttributes,ct=t.getNodeType,ut=t.getRenderedAttributes,gt=t.getSchema,_t=t.getSchemaByResolvedExtensions,xt=t.getSchemaTypeByName,mt=t.getSchemaTypeNameByName,kt=t.getSplittedAttributes,bt=t.getText,yt=t.getTextBetween,ft=t.getTextContentFromNodes,ht=t.getTextSerializersFromSchema,Et=t.injectExtensionAttributesToParseRule,Rt=t.inputRulesPlugin,Pt=t.isActive,Ct=t.isAtEndOfNode,Tt=t.isAtStartOfNode,St=t.isEmptyObject,At=t.isExtensionRulesEnabled,Bt=t.isFunction,Nt=t.isList,Ot=t.isMacOS,Mt=t.isMarkActive,wt=t.isNodeActive,vt=t.isNodeEmpty,It=t.isNodeSelection,Ft=t.isNumber,Dt=t.isPlainObject,jt=t.isRegExp,Ht=t.isSafari,Lt=t.isString,Kt=t.isTextSelection,qt=t.isiOS,Gt=t.markInputRule,zt=t.markPasteRule,l=t.mergeAttributes,Jt=t.mergeDeep,$t=t.minMax,Ut=t.nodeInputRule,Vt=t.nodePasteRule,Yt=t.objectIncludes,Qt=t.pasteRulesPlugin,Wt=t.posToDOMRect,Xt=t.removeDuplicates,Zt=t.resolveFocusPosition,te=t.rewriteUnknownContent,ee=t.selectionToInsertionEnd,ne=t.splitExtensions,oe=t.textInputRule,re=t.textPasteRule,ie=t.textblockTypeInputRule,se=t.wrappingInputRule;var d=a.create({name:"hardBreak",addOptions(){return{keepMarks:!0,HTMLAttributes:{}}},inline:!0,group:"inline",selectable:!1,linebreakReplacement:!0,parseHTML(){return[{tag:"br"}]},renderHTML({HTMLAttributes:e}){return["br",l(this.options.HTMLAttributes,e)]},renderText(){return` -`},addCommands(){return{setHardBreak:()=>({commands:e,chain:n,state:o,editor:g})=>e.first([()=>e.exitCode(),()=>e.command(()=>{let{selection:r,storedMarks:_}=o;if(r.$from.parent.type.spec.isolating)return!1;let{keepMarks:x}=this.options,{splittableMarks:m}=g.extensionManager,s=_||r.$to.parentOffset&&r.$from.marks();return n().insertContent({type:this.name}).command(({tr:k,dispatch:b})=>{if(b&&s&&x){let y=s.filter(f=>m.includes(f.type.name));k.ensureMarks(y)}return!0}).run()})])}},addKeyboardShortcuts(){return{"Mod-Enter":()=>this.editor.commands.setHardBreak(),"Shift-Enter":()=>this.editor.commands.setHardBreak()}}});var p="__LEPTOS_TIPTAP_BRIDGE__";function h(){let e=globalThis,n=e[p];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[p]=o,o}function c(){return h()}function u(e){c().registerExtension(e)}var E={name:"hard_break",create:()=>d,commands:{set_hard_break:e=>e.chain().focus().setHardBreak().run()}};function xe(){u(E)}export{xe as register_hard_break}; +var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=i.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var R=e.CommandManager,P=e.Editor,C=e.Extension,T=e.InputRule,S=e.Mark,a=e.Node,A=e.NodePos,B=e.NodeView,w=e.PasteRule,N=e.Tracker,O=e.callOrReturn,M=e.canInsertNode,v=e.combineTransactionSteps,I=e.createChainableState,F=e.createDocument,D=e.createNodeFromContent,j=e.createStyleTag,H=e.defaultBlockAt,L=e.deleteProps,K=e.elementFromString,q=e.escapeForRegEx,G=e.extensions,z=e.findChildren,J=e.findChildrenInRange,$=e.findDuplicates,U=e.findParentNode,V=e.findParentNodeClosestToPos,Y=e.fromString,Q=e.generateHTML,W=e.generateJSON,X=e.generateText,Z=e.getAttributes,ee=e.getAttributesFromExtensions,te=e.getChangedRanges,ne=e.getDebugJSON,oe=e.getExtensionField,re=e.getHTMLFromFragment,ie=e.getMarkAttributes,se=e.getMarkRange,ae=e.getMarkType,le=e.getMarksBetween,de=e.getNodeAtPosition,pe=e.getNodeAttributes,ce=e.getNodeType,ue=e.getRenderedAttributes,ge=e.getSchema,_e=e.getSchemaByResolvedExtensions,me=e.getSchemaTypeByName,xe=e.getSchemaTypeNameByName,ke=e.getSplittedAttributes,be=e.getText,ye=e.getTextBetween,he=e.getTextContentFromNodes,fe=e.getTextSerializersFromSchema,Ee=e.injectExtensionAttributesToParseRule,Re=e.inputRulesPlugin,Pe=e.isActive,Ce=e.isAtEndOfNode,Te=e.isAtStartOfNode,Se=e.isEmptyObject,Ae=e.isExtensionRulesEnabled,Be=e.isFunction,we=e.isList,Ne=e.isMacOS,Oe=e.isMarkActive,Me=e.isNodeActive,ve=e.isNodeEmpty,Ie=e.isNodeSelection,Fe=e.isNumber,De=e.isPlainObject,je=e.isRegExp,He=e.isSafari,Le=e.isString,Ke=e.isTextSelection,qe=e.isiOS,Ge=e.markInputRule,ze=e.markPasteRule,l=e.mergeAttributes,Je=e.mergeDeep,$e=e.minMax,Ue=e.nodeInputRule,Ve=e.nodePasteRule,Ye=e.objectIncludes,Qe=e.pasteRulesPlugin,We=e.posToDOMRect,Xe=e.removeDuplicates,Ze=e.resolveFocusPosition,et=e.rewriteUnknownContent,tt=e.selectionToInsertionEnd,nt=e.splitExtensions,ot=e.textInputRule,rt=e.textPasteRule,it=e.textblockTypeInputRule,st=e.wrappingInputRule;var d=a.create({name:"hardBreak",addOptions(){return{keepMarks:!0,HTMLAttributes:{}}},inline:!0,group:"inline",selectable:!1,linebreakReplacement:!0,parseHTML(){return[{tag:"br"}]},renderHTML({HTMLAttributes:t}){return["br",l(this.options.HTMLAttributes,t)]},renderText(){return` +`},addCommands(){return{setHardBreak:()=>({commands:t,chain:n,state:o,editor:g})=>t.first([()=>t.exitCode(),()=>t.command(()=>{let{selection:r,storedMarks:_}=o;if(r.$from.parent.type.spec.isolating)return!1;let{keepMarks:m}=this.options,{splittableMarks:x}=g.extensionManager,s=_||r.$to.parentOffset&&r.$from.marks();return n().insertContent({type:this.name}).command(({tr:k,dispatch:b})=>{if(b&&s&&m){let y=s.filter(h=>x.includes(h.type.name));k.ensureMarks(y)}return!0}).run()})])}},addKeyboardShortcuts(){return{"Mod-Enter":()=>this.editor.commands.setHardBreak(),"Shift-Enter":()=>this.editor.commands.setHardBreak()}}});var p="__LEPTOS_TIPTAP_BRIDGE__";function f(){let t=globalThis,n=t[p];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[p]=o,o}function c(){return f()}function u(t){c().registerExtension(t)}var E={name:"hard_break",create:()=>d,commands:{set_hard_break:t=>t.chain().focus().setHardBreak().run()}};function mt(){u(E)}export{mt as register_hard_break}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_heading.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_heading.js index 77d66878..20dc8f1d 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_heading.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_heading.js @@ -1 +1 @@ -var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=i.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var x=e.CommandManager,m=e.Editor,k=e.Extension,b=e.InputRule,y=e.Mark,r=e.Node,h=e.NodePos,f=e.NodeView,E=e.PasteRule,R=e.Tracker,A=e.callOrReturn,P=e.canInsertNode,v=e.combineTransactionSteps,T=e.createChainableState,C=e.createDocument,S=e.createNodeFromContent,N=e.createStyleTag,O=e.defaultBlockAt,B=e.deleteProps,w=e.elementFromString,M=e.escapeForRegEx,I=e.extensions,F=e.findChildren,D=e.findChildrenInRange,j=e.findDuplicates,H=e.findParentNode,L=e.findParentNodeClosestToPos,K=e.fromString,q=e.generateHTML,G=e.generateJSON,$=e.generateText,z=e.getAttributes,J=e.getAttributesFromExtensions,U=e.getChangedRanges,V=e.getDebugJSON,Y=e.getExtensionField,Q=e.getHTMLFromFragment,W=e.getMarkAttributes,X=e.getMarkRange,Z=e.getMarkType,ee=e.getMarksBetween,te=e.getNodeAtPosition,ne=e.getNodeAttributes,oe=e.getNodeType,ie=e.getRenderedAttributes,re=e.getSchema,se=e.getSchemaByResolvedExtensions,le=e.getSchemaTypeByName,ae=e.getSchemaTypeNameByName,de=e.getSplittedAttributes,pe=e.getText,ce=e.getTextBetween,ue=e.getTextContentFromNodes,ge=e.getTextSerializersFromSchema,_e=e.injectExtensionAttributesToParseRule,xe=e.inputRulesPlugin,me=e.isActive,ke=e.isAtEndOfNode,be=e.isAtStartOfNode,ye=e.isEmptyObject,he=e.isExtensionRulesEnabled,fe=e.isFunction,Ee=e.isList,Re=e.isMacOS,Ae=e.isMarkActive,Pe=e.isNodeActive,ve=e.isNodeEmpty,Te=e.isNodeSelection,Ce=e.isNumber,Se=e.isPlainObject,Ne=e.isRegExp,Oe=e.isSafari,Be=e.isString,we=e.isTextSelection,Me=e.isiOS,Ie=e.markInputRule,Fe=e.markPasteRule,s=e.mergeAttributes,De=e.mergeDeep,je=e.minMax,He=e.nodeInputRule,Le=e.nodePasteRule,Ke=e.objectIncludes,qe=e.pasteRulesPlugin,Ge=e.posToDOMRect,$e=e.removeDuplicates,ze=e.resolveFocusPosition,Je=e.rewriteUnknownContent,Ue=e.selectionToInsertionEnd,Ve=e.splitExtensions,Ye=e.textInputRule,Qe=e.textPasteRule,l=e.textblockTypeInputRule,We=e.wrappingInputRule;var a=r.create({name:"heading",addOptions(){return{levels:[1,2,3,4,5,6],HTMLAttributes:{}}},content:"inline*",group:"block",defining:!0,addAttributes(){return{level:{default:1,rendered:!1}}},parseHTML(){return this.options.levels.map(t=>({tag:`h${t}`,attrs:{level:t}}))},renderHTML({node:t,HTMLAttributes:n}){return[`h${this.options.levels.includes(t.attrs.level)?t.attrs.level:this.options.levels[0]}`,s(this.options.HTMLAttributes,n),0]},addCommands(){return{setHeading:t=>({commands:n})=>this.options.levels.includes(t.level)?n.setNode(this.name,t):!1,toggleHeading:t=>({commands:n})=>this.options.levels.includes(t.level)?n.toggleNode(this.name,"paragraph",t):!1}},addKeyboardShortcuts(){return this.options.levels.reduce((t,n)=>({...t,[`Mod-Alt-${n}`]:()=>this.editor.commands.toggleHeading({level:n})}),{})},addInputRules(){return this.options.levels.map(t=>l({find:new RegExp(`^(#{${Math.min(...this.options.levels)},${t}})\\s$`),type:this.type,getAttributes:{level:t}}))}});var d="__LEPTOS_TIPTAP_BRIDGE__";function u(){let t=globalThis,n=t[d];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[d]=o,o}function p(){return u()}function c(t){p().registerExtension(t)}var g={name:"heading",create:()=>a,commands:{set_heading:(t,n)=>n.kind==="set_heading"?t.chain().focus().setHeading({level:n.level}).run():!1,toggle_heading:(t,n)=>n.kind==="toggle_heading"?t.chain().focus().toggleHeading({level:n.level}).run():!1},selection_keys:["h1","h2","h3","h4","h5","h6"],selection_state:t=>({h1:t.isActive("heading",{level:1}),h2:t.isActive("heading",{level:2}),h3:t.isActive("heading",{level:3}),h4:t.isActive("heading",{level:4}),h5:t.isActive("heading",{level:5}),h6:t.isActive("heading",{level:6})})};function st(){c(g)}export{st as register_heading}; +var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=i.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var x=e.CommandManager,m=e.Editor,k=e.Extension,b=e.InputRule,y=e.Mark,r=e.Node,h=e.NodePos,f=e.NodeView,E=e.PasteRule,R=e.Tracker,A=e.callOrReturn,P=e.canInsertNode,T=e.combineTransactionSteps,v=e.createChainableState,C=e.createDocument,S=e.createNodeFromContent,w=e.createStyleTag,N=e.defaultBlockAt,O=e.deleteProps,B=e.elementFromString,M=e.escapeForRegEx,I=e.extensions,F=e.findChildren,D=e.findChildrenInRange,j=e.findDuplicates,H=e.findParentNode,L=e.findParentNodeClosestToPos,K=e.fromString,q=e.generateHTML,G=e.generateJSON,$=e.generateText,z=e.getAttributes,J=e.getAttributesFromExtensions,U=e.getChangedRanges,V=e.getDebugJSON,Y=e.getExtensionField,Q=e.getHTMLFromFragment,W=e.getMarkAttributes,X=e.getMarkRange,Z=e.getMarkType,ee=e.getMarksBetween,te=e.getNodeAtPosition,ne=e.getNodeAttributes,oe=e.getNodeType,ie=e.getRenderedAttributes,re=e.getSchema,se=e.getSchemaByResolvedExtensions,le=e.getSchemaTypeByName,ae=e.getSchemaTypeNameByName,de=e.getSplittedAttributes,pe=e.getText,ue=e.getTextBetween,ce=e.getTextContentFromNodes,ge=e.getTextSerializersFromSchema,_e=e.injectExtensionAttributesToParseRule,xe=e.inputRulesPlugin,me=e.isActive,ke=e.isAtEndOfNode,be=e.isAtStartOfNode,ye=e.isEmptyObject,he=e.isExtensionRulesEnabled,fe=e.isFunction,Ee=e.isList,Re=e.isMacOS,Ae=e.isMarkActive,Pe=e.isNodeActive,Te=e.isNodeEmpty,ve=e.isNodeSelection,Ce=e.isNumber,Se=e.isPlainObject,we=e.isRegExp,Ne=e.isSafari,Oe=e.isString,Be=e.isTextSelection,Me=e.isiOS,Ie=e.markInputRule,Fe=e.markPasteRule,s=e.mergeAttributes,De=e.mergeDeep,je=e.minMax,He=e.nodeInputRule,Le=e.nodePasteRule,Ke=e.objectIncludes,qe=e.pasteRulesPlugin,Ge=e.posToDOMRect,$e=e.removeDuplicates,ze=e.resolveFocusPosition,Je=e.rewriteUnknownContent,Ue=e.selectionToInsertionEnd,Ve=e.splitExtensions,Ye=e.textInputRule,Qe=e.textPasteRule,l=e.textblockTypeInputRule,We=e.wrappingInputRule;var a=r.create({name:"heading",addOptions(){return{levels:[1,2,3,4,5,6],HTMLAttributes:{}}},content:"inline*",group:"block",defining:!0,addAttributes(){return{level:{default:1,rendered:!1}}},parseHTML(){return this.options.levels.map(t=>({tag:`h${t}`,attrs:{level:t}}))},renderHTML({node:t,HTMLAttributes:n}){return[`h${this.options.levels.includes(t.attrs.level)?t.attrs.level:this.options.levels[0]}`,s(this.options.HTMLAttributes,n),0]},addCommands(){return{setHeading:t=>({commands:n})=>this.options.levels.includes(t.level)?n.setNode(this.name,t):!1,toggleHeading:t=>({commands:n})=>this.options.levels.includes(t.level)?n.toggleNode(this.name,"paragraph",t):!1}},addKeyboardShortcuts(){return this.options.levels.reduce((t,n)=>({...t,[`Mod-Alt-${n}`]:()=>this.editor.commands.toggleHeading({level:n})}),{})},addInputRules(){return this.options.levels.map(t=>l({find:new RegExp(`^(#{${Math.min(...this.options.levels)},${t}})\\s$`),type:this.type,getAttributes:{level:t}}))}});var d="__LEPTOS_TIPTAP_BRIDGE__";function c(){let t=globalThis,n=t[d];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[d]=o,o}function p(){return c()}function u(t){p().registerExtension(t)}var g={name:"heading",create:()=>a.extend({addAttributes(){return{...this.parent?.(),collapsed:{default:null,parseHTML:t=>{let n=t.getAttribute("data-collapsed");return n==="true"?!0:n==="false"?!1:null},renderHTML:t=>t.collapsed===!0?{"data-collapsed":"true"}:{}}}}}),commands:{set_heading:(t,n)=>n.kind==="set_heading"?t.chain().focus().setHeading({level:n.level,...n.collapsed==null?{}:{collapsed:n.collapsed}}).run():!1,toggle_heading:(t,n)=>n.kind==="toggle_heading"?t.chain().focus().toggleHeading({level:n.level,...n.collapsed==null?{}:{collapsed:n.collapsed}}).run():!1},selection_keys:["h1","h2","h3","h4","h5","h6"],selection_state:t=>({h1:t.isActive("heading",{level:1}),h2:t.isActive("heading",{level:2}),h3:t.isActive("heading",{level:3}),h4:t.isActive("heading",{level:4}),h5:t.isActive("heading",{level:5}),h6:t.isActive("heading",{level:6})})};function st(){u(g)}export{st as register_heading}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_highlight.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_highlight.js index 54825a15..9db1517d 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_highlight.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_highlight.js @@ -1 +1 @@ -var o=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(o==null||o.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=o.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var b=t.CommandManager,h=t.Editor,y=t.Extension,f=t.InputRule,r=t.Mark,R=t.Node,E=t.NodePos,P=t.NodeView,T=t.PasteRule,A=t.Tracker,C=t.callOrReturn,S=t.canInsertNode,N=t.combineTransactionSteps,O=t.createChainableState,B=t.createDocument,w=t.createNodeFromContent,M=t.createStyleTag,v=t.defaultBlockAt,I=t.deleteProps,F=t.elementFromString,D=t.escapeForRegEx,H=t.extensions,j=t.findChildren,L=t.findChildrenInRange,K=t.findDuplicates,q=t.findParentNode,G=t.findParentNodeClosestToPos,z=t.fromString,J=t.generateHTML,U=t.generateJSON,V=t.generateText,Y=t.getAttributes,$=t.getAttributesFromExtensions,Q=t.getChangedRanges,W=t.getDebugJSON,X=t.getExtensionField,Z=t.getHTMLFromFragment,tt=t.getMarkAttributes,et=t.getMarkRange,nt=t.getMarkType,ot=t.getMarksBetween,it=t.getNodeAtPosition,rt=t.getNodeAttributes,st=t.getNodeType,lt=t.getRenderedAttributes,at=t.getSchema,dt=t.getSchemaByResolvedExtensions,pt=t.getSchemaTypeByName,ut=t.getSchemaTypeNameByName,ct=t.getSplittedAttributes,gt=t.getText,_t=t.getTextBetween,xt=t.getTextContentFromNodes,mt=t.getTextSerializersFromSchema,kt=t.injectExtensionAttributesToParseRule,bt=t.inputRulesPlugin,ht=t.isActive,yt=t.isAtEndOfNode,ft=t.isAtStartOfNode,Rt=t.isEmptyObject,Et=t.isExtensionRulesEnabled,Pt=t.isFunction,Tt=t.isList,At=t.isMacOS,Ct=t.isMarkActive,St=t.isNodeActive,Nt=t.isNodeEmpty,Ot=t.isNodeSelection,Bt=t.isNumber,wt=t.isPlainObject,Mt=t.isRegExp,vt=t.isSafari,It=t.isString,Ft=t.isTextSelection,Dt=t.isiOS,s=t.markInputRule,l=t.markPasteRule,a=t.mergeAttributes,Ht=t.mergeDeep,jt=t.minMax,Lt=t.nodeInputRule,Kt=t.nodePasteRule,qt=t.objectIncludes,Gt=t.pasteRulesPlugin,zt=t.posToDOMRect,Jt=t.removeDuplicates,Ut=t.resolveFocusPosition,Vt=t.rewriteUnknownContent,Yt=t.selectionToInsertionEnd,$t=t.splitExtensions,Qt=t.textInputRule,Wt=t.textPasteRule,Xt=t.textblockTypeInputRule,Zt=t.wrappingInputRule;var _=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))$/,x=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))/g,d=r.create({name:"highlight",addOptions(){return{multicolor:!1,HTMLAttributes:{}}},addAttributes(){return this.options.multicolor?{color:{default:null,parseHTML:e=>e.getAttribute("data-color")||e.style.backgroundColor,renderHTML:e=>e.color?{"data-color":e.color,style:`background-color: ${e.color}; color: inherit`}:{}}}:{}},parseHTML(){return[{tag:"mark"}]},renderHTML({HTMLAttributes:e}){return["mark",a(this.options.HTMLAttributes,e),0]},addCommands(){return{setHighlight:e=>({commands:n})=>n.setMark(this.name,e),toggleHighlight:e=>({commands:n})=>n.toggleMark(this.name,e),unsetHighlight:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-h":()=>this.editor.commands.toggleHighlight()}},addInputRules(){return[s({find:_,type:this.type})]},addPasteRules(){return[l({find:x,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function m(){let e=globalThis,n=e[p];if(n!=null)return n;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[p]=i,i}function u(){return m()}function c(e){u().registerExtension(e)}function g(e){if(e?.color!=null)return{color:e.color}}var k={name:"highlight",create:()=>d.configure({multicolor:!0}),commands:{set_highlight:(e,n)=>n.kind==="set_highlight"?e.chain().focus().setHighlight(g(n.attributes)).run():!1,toggle_highlight:(e,n)=>n.kind==="toggle_highlight"?e.chain().focus().toggleHighlight(g(n.attributes)).run():!1,unset_highlight:e=>e.chain().focus().unsetHighlight().run()},selection_keys:["highlight"],selection_state:e=>({highlight:e.isActive("highlight")})};function ae(){c(k)}export{ae as register_highlight}; +var o=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(o==null||o.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=o.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var b=t.CommandManager,h=t.Editor,y=t.Extension,f=t.InputRule,r=t.Mark,R=t.Node,E=t.NodePos,P=t.NodeView,T=t.PasteRule,A=t.Tracker,C=t.callOrReturn,S=t.canInsertNode,w=t.combineTransactionSteps,N=t.createChainableState,O=t.createDocument,B=t.createNodeFromContent,M=t.createStyleTag,v=t.defaultBlockAt,I=t.deleteProps,F=t.elementFromString,D=t.escapeForRegEx,H=t.extensions,j=t.findChildren,L=t.findChildrenInRange,K=t.findDuplicates,q=t.findParentNode,G=t.findParentNodeClosestToPos,z=t.fromString,J=t.generateHTML,U=t.generateJSON,V=t.generateText,Y=t.getAttributes,$=t.getAttributesFromExtensions,Q=t.getChangedRanges,W=t.getDebugJSON,X=t.getExtensionField,Z=t.getHTMLFromFragment,tt=t.getMarkAttributes,et=t.getMarkRange,nt=t.getMarkType,ot=t.getMarksBetween,it=t.getNodeAtPosition,rt=t.getNodeAttributes,st=t.getNodeType,lt=t.getRenderedAttributes,at=t.getSchema,dt=t.getSchemaByResolvedExtensions,pt=t.getSchemaTypeByName,ut=t.getSchemaTypeNameByName,ct=t.getSplittedAttributes,gt=t.getText,_t=t.getTextBetween,xt=t.getTextContentFromNodes,mt=t.getTextSerializersFromSchema,kt=t.injectExtensionAttributesToParseRule,bt=t.inputRulesPlugin,ht=t.isActive,yt=t.isAtEndOfNode,ft=t.isAtStartOfNode,Rt=t.isEmptyObject,Et=t.isExtensionRulesEnabled,Pt=t.isFunction,Tt=t.isList,At=t.isMacOS,Ct=t.isMarkActive,St=t.isNodeActive,wt=t.isNodeEmpty,Nt=t.isNodeSelection,Ot=t.isNumber,Bt=t.isPlainObject,Mt=t.isRegExp,vt=t.isSafari,It=t.isString,Ft=t.isTextSelection,Dt=t.isiOS,s=t.markInputRule,l=t.markPasteRule,a=t.mergeAttributes,Ht=t.mergeDeep,jt=t.minMax,Lt=t.nodeInputRule,Kt=t.nodePasteRule,qt=t.objectIncludes,Gt=t.pasteRulesPlugin,zt=t.posToDOMRect,Jt=t.removeDuplicates,Ut=t.resolveFocusPosition,Vt=t.rewriteUnknownContent,Yt=t.selectionToInsertionEnd,$t=t.splitExtensions,Qt=t.textInputRule,Wt=t.textPasteRule,Xt=t.textblockTypeInputRule,Zt=t.wrappingInputRule;var _=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))$/,x=/(?:^|\s)(==(?!\s+==)((?:[^=]+))==(?!\s+==))/g,d=r.create({name:"highlight",addOptions(){return{multicolor:!1,HTMLAttributes:{}}},addAttributes(){return this.options.multicolor?{color:{default:null,parseHTML:e=>e.getAttribute("data-color")||e.style.backgroundColor,renderHTML:e=>e.color?{"data-color":e.color,style:`background-color: ${e.color}; color: inherit`}:{}}}:{}},parseHTML(){return[{tag:"mark"}]},renderHTML({HTMLAttributes:e}){return["mark",a(this.options.HTMLAttributes,e),0]},addCommands(){return{setHighlight:e=>({commands:n})=>n.setMark(this.name,e),toggleHighlight:e=>({commands:n})=>n.toggleMark(this.name,e),unsetHighlight:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-h":()=>this.editor.commands.toggleHighlight()}},addInputRules(){return[s({find:_,type:this.type})]},addPasteRules(){return[l({find:x,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function m(){let e=globalThis,n=e[p];if(n!=null)return n;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[p]=i,i}function u(){return m()}function c(e){u().registerExtension(e)}function g(e){if(e?.color!=null)return{color:e.color}}var k={name:"highlight",create:()=>d.configure({multicolor:!0}),commands:{set_highlight:(e,n)=>n.kind==="set_highlight"?e.chain().focus().setHighlight(g(n.attributes)).run():!1,toggle_highlight:(e,n)=>n.kind==="toggle_highlight"?e.chain().focus().toggleHighlight(g(n.attributes)).run():!1,unset_highlight:e=>e.chain().focus().unsetHighlight().run()},selection_keys:["highlight"],selection_state:e=>({highlight:e.isActive("highlight")})};function ae(){c(k)}export{ae as register_highlight}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_history.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_history.js index 025df3f1..ad5dd7c3 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_history.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_history.js @@ -1 +1 @@ -var r=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(r==null||r.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=r.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,l=t.Extension,y=t.InputRule,h=t.Mark,E=t.Node,f=t.NodePos,R=t.NodeView,P=t.PasteRule,S=t.Tracker,T=t.callOrReturn,C=t.canInsertNode,A=t.combineTransactionSteps,N=t.createChainableState,O=t.createDocument,w=t.createNodeFromContent,B=t.createStyleTag,v=t.defaultBlockAt,M=t.deleteProps,D=t.elementFromString,I=t.escapeForRegEx,F=t.extensions,j=t.findChildren,H=t.findChildrenInRange,L=t.findDuplicates,K=t.findParentNode,G=t.findParentNodeClosestToPos,q=t.fromString,z=t.generateHTML,J=t.generateJSON,U=t.generateText,V=t.getAttributes,Y=t.getAttributesFromExtensions,Q=t.getChangedRanges,W=t.getDebugJSON,X=t.getExtensionField,Z=t.getHTMLFromFragment,$=t.getMarkAttributes,tt=t.getMarkRange,et=t.getMarkType,nt=t.getMarksBetween,ot=t.getNodeAtPosition,rt=t.getNodeAttributes,it=t.getNodeType,st=t.getRenderedAttributes,lt=t.getSchema,at=t.getSchemaByResolvedExtensions,dt=t.getSchemaTypeByName,pt=t.getSchemaTypeNameByName,ct=t.getSplittedAttributes,ut=t.getText,gt=t.getTextBetween,_t=t.getTextContentFromNodes,xt=t.getTextSerializersFromSchema,mt=t.injectExtensionAttributesToParseRule,kt=t.inputRulesPlugin,bt=t.isActive,yt=t.isAtEndOfNode,ht=t.isAtStartOfNode,Et=t.isEmptyObject,ft=t.isExtensionRulesEnabled,Rt=t.isFunction,Pt=t.isList,St=t.isMacOS,Tt=t.isMarkActive,Ct=t.isNodeActive,At=t.isNodeEmpty,Nt=t.isNodeSelection,Ot=t.isNumber,wt=t.isPlainObject,Bt=t.isRegExp,vt=t.isSafari,Mt=t.isString,Dt=t.isTextSelection,It=t.isiOS,Ft=t.markInputRule,jt=t.markPasteRule,Ht=t.mergeAttributes,Lt=t.mergeDeep,Kt=t.minMax,Gt=t.nodeInputRule,qt=t.nodePasteRule,zt=t.objectIncludes,Jt=t.pasteRulesPlugin,Ut=t.posToDOMRect,Vt=t.removeDuplicates,Yt=t.resolveFocusPosition,Qt=t.rewriteUnknownContent,Wt=t.selectionToInsertionEnd,Xt=t.splitExtensions,Zt=t.textInputRule,$t=t.textPasteRule,te=t.textblockTypeInputRule,ee=t.wrappingInputRule;var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var n=i.modules["@tiptap/pm/history"];if(n==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/history" is unavailable');var oe=n.closeHistory,a=n.history,re=n.isHistoryTransaction,d=n.redo,ie=n.redoDepth,se=n.redoNoScroll,p=n.undo,le=n.undoDepth,ae=n.undoNoScroll;var c=l.create({name:"history",addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:e,dispatch:o})=>p(e,o),redo:()=>({state:e,dispatch:o})=>d(e,o)}},addProseMirrorPlugins(){return[a(this.options)]},addKeyboardShortcuts(){return{"Mod-z":()=>this.editor.commands.undo(),"Shift-Mod-z":()=>this.editor.commands.redo(),"Mod-y":()=>this.editor.commands.redo(),"Mod-\u044F":()=>this.editor.commands.undo(),"Shift-Mod-\u044F":()=>this.editor.commands.redo()}}});var u="__LEPTOS_TIPTAP_BRIDGE__";function x(){let e=globalThis,o=e[u];if(o!=null)return o;let s={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[u]=s,s}function g(){return x()}function _(e){g().registerExtension(e)}var m={name:"history",create:()=>c,commands:{undo:e=>e.chain().focus().undo().run(),redo:e=>e.chain().focus().redo().run()}};function be(){_(m)}export{be as register_history}; +var r=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(r==null||r.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=r.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,l=t.Extension,y=t.InputRule,h=t.Mark,E=t.Node,f=t.NodePos,R=t.NodeView,P=t.PasteRule,S=t.Tracker,T=t.callOrReturn,C=t.canInsertNode,A=t.combineTransactionSteps,w=t.createChainableState,N=t.createDocument,O=t.createNodeFromContent,B=t.createStyleTag,v=t.defaultBlockAt,M=t.deleteProps,D=t.elementFromString,I=t.escapeForRegEx,F=t.extensions,j=t.findChildren,H=t.findChildrenInRange,L=t.findDuplicates,K=t.findParentNode,G=t.findParentNodeClosestToPos,q=t.fromString,z=t.generateHTML,J=t.generateJSON,U=t.generateText,V=t.getAttributes,Y=t.getAttributesFromExtensions,Q=t.getChangedRanges,W=t.getDebugJSON,X=t.getExtensionField,Z=t.getHTMLFromFragment,$=t.getMarkAttributes,tt=t.getMarkRange,et=t.getMarkType,nt=t.getMarksBetween,ot=t.getNodeAtPosition,rt=t.getNodeAttributes,it=t.getNodeType,st=t.getRenderedAttributes,lt=t.getSchema,at=t.getSchemaByResolvedExtensions,dt=t.getSchemaTypeByName,pt=t.getSchemaTypeNameByName,ct=t.getSplittedAttributes,ut=t.getText,gt=t.getTextBetween,_t=t.getTextContentFromNodes,xt=t.getTextSerializersFromSchema,mt=t.injectExtensionAttributesToParseRule,kt=t.inputRulesPlugin,bt=t.isActive,yt=t.isAtEndOfNode,ht=t.isAtStartOfNode,Et=t.isEmptyObject,ft=t.isExtensionRulesEnabled,Rt=t.isFunction,Pt=t.isList,St=t.isMacOS,Tt=t.isMarkActive,Ct=t.isNodeActive,At=t.isNodeEmpty,wt=t.isNodeSelection,Nt=t.isNumber,Ot=t.isPlainObject,Bt=t.isRegExp,vt=t.isSafari,Mt=t.isString,Dt=t.isTextSelection,It=t.isiOS,Ft=t.markInputRule,jt=t.markPasteRule,Ht=t.mergeAttributes,Lt=t.mergeDeep,Kt=t.minMax,Gt=t.nodeInputRule,qt=t.nodePasteRule,zt=t.objectIncludes,Jt=t.pasteRulesPlugin,Ut=t.posToDOMRect,Vt=t.removeDuplicates,Yt=t.resolveFocusPosition,Qt=t.rewriteUnknownContent,Wt=t.selectionToInsertionEnd,Xt=t.splitExtensions,Zt=t.textInputRule,$t=t.textPasteRule,te=t.textblockTypeInputRule,ee=t.wrappingInputRule;var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var n=i.modules["@tiptap/pm/history"];if(n==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/history" is unavailable');var oe=n.closeHistory,a=n.history,re=n.isHistoryTransaction,d=n.redo,ie=n.redoDepth,se=n.redoNoScroll,p=n.undo,le=n.undoDepth,ae=n.undoNoScroll;var c=l.create({name:"history",addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:e,dispatch:o})=>p(e,o),redo:()=>({state:e,dispatch:o})=>d(e,o)}},addProseMirrorPlugins(){return[a(this.options)]},addKeyboardShortcuts(){return{"Mod-z":()=>this.editor.commands.undo(),"Shift-Mod-z":()=>this.editor.commands.redo(),"Mod-y":()=>this.editor.commands.redo(),"Mod-\u044F":()=>this.editor.commands.undo(),"Shift-Mod-\u044F":()=>this.editor.commands.redo()}}});var u="__LEPTOS_TIPTAP_BRIDGE__";function x(){let e=globalThis,o=e[u];if(o!=null)return o;let s={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[u]=s,s}function g(){return x()}function _(e){g().registerExtension(e)}var m={name:"history",create:()=>c,commands:{undo:e=>e.chain().focus().undo().run(),redo:e=>e.chain().focus().redo().run()}};function be(){_(m)}export{be as register_history}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_horizontal_rule.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_horizontal_rule.js index 3bcb573f..c17ff729 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_horizontal_rule.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_horizontal_rule.js @@ -1 +1 @@ -var d=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(d==null||d.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=d.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var N=e.CommandManager,O=e.Editor,B=e.Extension,w=e.InputRule,v=e.Mark,m=e.Node,I=e.NodePos,M=e.NodeView,F=e.PasteRule,D=e.Tracker,j=e.callOrReturn,k=e.canInsertNode,L=e.combineTransactionSteps,H=e.createChainableState,K=e.createDocument,z=e.createNodeFromContent,G=e.createStyleTag,q=e.defaultBlockAt,$=e.deleteProps,J=e.elementFromString,V=e.escapeForRegEx,U=e.extensions,Y=e.findChildren,Q=e.findChildrenInRange,W=e.findDuplicates,X=e.findParentNode,Z=e.findParentNodeClosestToPos,ee=e.fromString,te=e.generateHTML,ne=e.generateJSON,oe=e.generateText,ie=e.getAttributes,re=e.getAttributesFromExtensions,se=e.getChangedRanges,le=e.getDebugJSON,ae=e.getExtensionField,pe=e.getHTMLFromFragment,de=e.getMarkAttributes,ce=e.getMarkRange,ue=e.getMarkType,ge=e.getMarksBetween,_e=e.getNodeAtPosition,xe=e.getNodeAttributes,me=e.getNodeType,ke=e.getRenderedAttributes,be=e.getSchema,ye=e.getSchemaByResolvedExtensions,fe=e.getSchemaTypeByName,he=e.getSchemaTypeNameByName,Ee=e.getSplittedAttributes,Re=e.getText,Se=e.getTextBetween,Te=e.getTextContentFromNodes,Pe=e.getTextSerializersFromSchema,Ae=e.injectExtensionAttributesToParseRule,Ce=e.inputRulesPlugin,Ne=e.isActive,Oe=e.isAtEndOfNode,Be=e.isAtStartOfNode,we=e.isEmptyObject,ve=e.isExtensionRulesEnabled,Ie=e.isFunction,Me=e.isList,Fe=e.isMacOS,De=e.isMarkActive,je=e.isNodeActive,Le=e.isNodeEmpty,b=e.isNodeSelection,He=e.isNumber,Ke=e.isPlainObject,ze=e.isRegExp,Ge=e.isSafari,qe=e.isString,$e=e.isTextSelection,Je=e.isiOS,Ve=e.markInputRule,Ue=e.markPasteRule,y=e.mergeAttributes,Ye=e.mergeDeep,Qe=e.minMax,f=e.nodeInputRule,We=e.nodePasteRule,Xe=e.objectIncludes,Ze=e.pasteRulesPlugin,et=e.posToDOMRect,tt=e.removeDuplicates,nt=e.resolveFocusPosition,ot=e.rewriteUnknownContent,it=e.selectionToInsertionEnd,rt=e.splitExtensions,st=e.textInputRule,lt=e.textPasteRule,at=e.textblockTypeInputRule,pt=e.wrappingInputRule;var c=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(c==null||c.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var o=c.modules["@tiptap/pm/state"];if(o==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/state" is unavailable');var ct=o.AllSelection,ut=o.EditorState,h=o.NodeSelection,gt=o.Plugin,_t=o.PluginKey,xt=o.Selection,mt=o.SelectionRange,a=o.TextSelection,kt=o.Transaction;var E=m.create({name:"horizontalRule",addOptions(){return{HTMLAttributes:{}}},group:"block",parseHTML(){return[{tag:"hr"}]},renderHTML({HTMLAttributes:n}){return["hr",y(this.options.HTMLAttributes,n)]},addCommands(){return{setHorizontalRule:()=>({chain:n,state:r})=>{if(!k(r,r.schema.nodes[this.name]))return!1;let{selection:s}=r,{$from:u,$to:g}=s,l=n();return u.parentOffset===0?l.insertContentAt({from:Math.max(u.pos-1,0),to:g.pos},{type:this.name}):b(s)?l.insertContentAt(g.pos,{type:this.name}):l.insertContent({type:this.name}),l.command(({tr:t,dispatch:P})=>{var p;if(P){let{$to:i}=t.selection,_=i.end();if(i.nodeAfter)i.nodeAfter.isTextblock?t.setSelection(a.create(t.doc,i.pos+1)):i.nodeAfter.isBlock?t.setSelection(h.create(t.doc,i.pos)):t.setSelection(a.create(t.doc,i.pos));else{let x=(p=i.parent.type.contentMatch.defaultType)===null||p===void 0?void 0:p.create();x&&(t.insert(_,x),t.setSelection(a.create(t.doc,_+1)))}t.scrollIntoView()}return!0}).run()}}},addInputRules(){return[f({find:/^(?:---|—-|___\s|\*\*\*\s)$/,type:this.type})]}});var R="__LEPTOS_TIPTAP_BRIDGE__";function A(){let n=globalThis,r=n[R];if(r!=null)return r;let s={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return n[R]=s,s}function S(){return A()}function T(n){S().registerExtension(n)}var C={name:"horizontal_rule",create:()=>E,commands:{set_horizontal_rule:n=>n.chain().focus().setHorizontalRule().run()}};function At(){T(C)}export{At as register_horizontal_rule}; +var p=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(p==null||p.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=p.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var w=e.CommandManager,N=e.Editor,O=e.Extension,B=e.InputRule,v=e.Mark,m=e.Node,I=e.NodePos,M=e.NodeView,F=e.PasteRule,D=e.Tracker,j=e.callOrReturn,k=e.canInsertNode,L=e.combineTransactionSteps,H=e.createChainableState,K=e.createDocument,z=e.createNodeFromContent,G=e.createStyleTag,q=e.defaultBlockAt,$=e.deleteProps,J=e.elementFromString,V=e.escapeForRegEx,U=e.extensions,Y=e.findChildren,Q=e.findChildrenInRange,W=e.findDuplicates,X=e.findParentNode,Z=e.findParentNodeClosestToPos,ee=e.fromString,te=e.generateHTML,ne=e.generateJSON,oe=e.generateText,ie=e.getAttributes,re=e.getAttributesFromExtensions,se=e.getChangedRanges,le=e.getDebugJSON,ae=e.getExtensionField,de=e.getHTMLFromFragment,pe=e.getMarkAttributes,ce=e.getMarkRange,ue=e.getMarkType,ge=e.getMarksBetween,_e=e.getNodeAtPosition,xe=e.getNodeAttributes,me=e.getNodeType,ke=e.getRenderedAttributes,be=e.getSchema,ye=e.getSchemaByResolvedExtensions,he=e.getSchemaTypeByName,fe=e.getSchemaTypeNameByName,Ee=e.getSplittedAttributes,Re=e.getText,Se=e.getTextBetween,Te=e.getTextContentFromNodes,Pe=e.getTextSerializersFromSchema,Ae=e.injectExtensionAttributesToParseRule,Ce=e.inputRulesPlugin,we=e.isActive,Ne=e.isAtEndOfNode,Oe=e.isAtStartOfNode,Be=e.isEmptyObject,ve=e.isExtensionRulesEnabled,Ie=e.isFunction,Me=e.isList,Fe=e.isMacOS,De=e.isMarkActive,je=e.isNodeActive,Le=e.isNodeEmpty,b=e.isNodeSelection,He=e.isNumber,Ke=e.isPlainObject,ze=e.isRegExp,Ge=e.isSafari,qe=e.isString,$e=e.isTextSelection,Je=e.isiOS,Ve=e.markInputRule,Ue=e.markPasteRule,y=e.mergeAttributes,Ye=e.mergeDeep,Qe=e.minMax,h=e.nodeInputRule,We=e.nodePasteRule,Xe=e.objectIncludes,Ze=e.pasteRulesPlugin,et=e.posToDOMRect,tt=e.removeDuplicates,nt=e.resolveFocusPosition,ot=e.rewriteUnknownContent,it=e.selectionToInsertionEnd,rt=e.splitExtensions,st=e.textInputRule,lt=e.textPasteRule,at=e.textblockTypeInputRule,dt=e.wrappingInputRule;var c=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(c==null||c.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var o=c.modules["@tiptap/pm/state"];if(o==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/state" is unavailable');var ct=o.AllSelection,ut=o.EditorState,f=o.NodeSelection,gt=o.Plugin,_t=o.PluginKey,xt=o.Selection,mt=o.SelectionRange,a=o.TextSelection,kt=o.Transaction;var E=m.create({name:"horizontalRule",addOptions(){return{HTMLAttributes:{}}},group:"block",parseHTML(){return[{tag:"hr"}]},renderHTML({HTMLAttributes:n}){return["hr",y(this.options.HTMLAttributes,n)]},addCommands(){return{setHorizontalRule:()=>({chain:n,state:r})=>{if(!k(r,r.schema.nodes[this.name]))return!1;let{selection:s}=r,{$from:u,$to:g}=s,l=n();return u.parentOffset===0?l.insertContentAt({from:Math.max(u.pos-1,0),to:g.pos},{type:this.name}):b(s)?l.insertContentAt(g.pos,{type:this.name}):l.insertContent({type:this.name}),l.command(({tr:t,dispatch:P})=>{var d;if(P){let{$to:i}=t.selection,_=i.end();if(i.nodeAfter)i.nodeAfter.isTextblock?t.setSelection(a.create(t.doc,i.pos+1)):i.nodeAfter.isBlock?t.setSelection(f.create(t.doc,i.pos)):t.setSelection(a.create(t.doc,i.pos));else{let x=(d=i.parent.type.contentMatch.defaultType)===null||d===void 0?void 0:d.create();x&&(t.insert(_,x),t.setSelection(a.create(t.doc,_+1)))}t.scrollIntoView()}return!0}).run()}}},addInputRules(){return[h({find:/^(?:---|—-|___\s|\*\*\*\s)$/,type:this.type})]}});var R="__LEPTOS_TIPTAP_BRIDGE__";function A(){let n=globalThis,r=n[R];if(r!=null)return r;let s={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return n[R]=s,s}function S(){return A()}function T(n){S().registerExtension(n)}var C={name:"horizontal_rule",create:()=>E,commands:{set_horizontal_rule:n=>n.chain().focus().setHorizontalRule().run()}};function At(){T(C)}export{At as register_horizontal_rule}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_image.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_image.js index 2ab16ac5..155545ed 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_image.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_image.js @@ -1 +1 @@ -var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=i.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,y=t.Extension,f=t.InputRule,E=t.Mark,r=t.Node,h=t.NodePos,R=t.NodeView,P=t.PasteRule,C=t.Tracker,A=t.callOrReturn,T=t.canInsertNode,S=t.combineTransactionSteps,N=t.createChainableState,O=t.createDocument,B=t.createNodeFromContent,w=t.createStyleTag,I=t.defaultBlockAt,v=t.deleteProps,M=t.elementFromString,F=t.escapeForRegEx,D=t.extensions,j=t.findChildren,L=t.findChildrenInRange,H=t.findDuplicates,K=t.findParentNode,q=t.findParentNodeClosestToPos,G=t.fromString,z=t.generateHTML,J=t.generateJSON,U=t.generateText,V=t.getAttributes,Y=t.getAttributesFromExtensions,$=t.getChangedRanges,Q=t.getDebugJSON,W=t.getExtensionField,X=t.getHTMLFromFragment,Z=t.getMarkAttributes,tt=t.getMarkRange,et=t.getMarkType,nt=t.getMarksBetween,ot=t.getNodeAtPosition,it=t.getNodeAttributes,rt=t.getNodeType,st=t.getRenderedAttributes,lt=t.getSchema,at=t.getSchemaByResolvedExtensions,dt=t.getSchemaTypeByName,pt=t.getSchemaTypeNameByName,ut=t.getSplittedAttributes,ct=t.getText,gt=t.getTextBetween,_t=t.getTextContentFromNodes,xt=t.getTextSerializersFromSchema,mt=t.injectExtensionAttributesToParseRule,kt=t.inputRulesPlugin,bt=t.isActive,yt=t.isAtEndOfNode,ft=t.isAtStartOfNode,Et=t.isEmptyObject,ht=t.isExtensionRulesEnabled,Rt=t.isFunction,Pt=t.isList,Ct=t.isMacOS,At=t.isMarkActive,Tt=t.isNodeActive,St=t.isNodeEmpty,Nt=t.isNodeSelection,Ot=t.isNumber,Bt=t.isPlainObject,wt=t.isRegExp,It=t.isSafari,vt=t.isString,Mt=t.isTextSelection,Ft=t.isiOS,Dt=t.markInputRule,jt=t.markPasteRule,s=t.mergeAttributes,Lt=t.mergeDeep,Ht=t.minMax,l=t.nodeInputRule,Kt=t.nodePasteRule,qt=t.objectIncludes,Gt=t.pasteRulesPlugin,zt=t.posToDOMRect,Jt=t.removeDuplicates,Ut=t.resolveFocusPosition,Vt=t.rewriteUnknownContent,Yt=t.selectionToInsertionEnd,$t=t.splitExtensions,Qt=t.textInputRule,Wt=t.textPasteRule,Xt=t.textblockTypeInputRule,Zt=t.wrappingInputRule;var g=/(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/,a=r.create({name:"image",addOptions(){return{inline:!1,allowBase64:!1,HTMLAttributes:{}}},inline(){return this.options.inline},group(){return this.options.inline?"inline":"block"},draggable:!0,addAttributes(){return{src:{default:null},alt:{default:null},title:{default:null}}},parseHTML(){return[{tag:this.options.allowBase64?"img[src]":'img[src]:not([src^="data:"])'}]},renderHTML({HTMLAttributes:e}){return["img",s(this.options.HTMLAttributes,e)]},addCommands(){return{setImage:e=>({commands:n})=>n.insertContent({type:this.name,attrs:e})}},addInputRules(){return[l({find:g,type:this.type,getAttributes:e=>{let[,,n,o,c]=e;return{src:o,alt:n,title:c}}})]}});var d="__LEPTOS_TIPTAP_BRIDGE__";function _(){let e=globalThis,n=e[d];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[d]=o,o}function p(){return _()}function u(e){p().registerExtension(e)}function x(e){return{src:e.src,alt:e.alt??void 0,title:e.title??void 0}}var m={name:"image",create:()=>a,commands:{set_image:(e,n)=>n.kind==="set_image"?e.chain().focus().setImage(x(n)).run():!1}};function ae(){u(m)}export{ae as register_image}; +var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=i.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var b=t.CommandManager,y=t.Editor,f=t.Extension,h=t.InputRule,E=t.Mark,r=t.Node,R=t.NodePos,P=t.NodeView,T=t.PasteRule,A=t.Tracker,C=t.callOrReturn,S=t.canInsertNode,w=t.combineTransactionSteps,N=t.createChainableState,O=t.createDocument,B=t.createNodeFromContent,I=t.createStyleTag,M=t.defaultBlockAt,v=t.deleteProps,F=t.elementFromString,D=t.escapeForRegEx,j=t.extensions,L=t.findChildren,H=t.findChildrenInRange,K=t.findDuplicates,q=t.findParentNode,G=t.findParentNodeClosestToPos,z=t.fromString,J=t.generateHTML,U=t.generateJSON,V=t.generateText,Y=t.getAttributes,$=t.getAttributesFromExtensions,Q=t.getChangedRanges,W=t.getDebugJSON,X=t.getExtensionField,Z=t.getHTMLFromFragment,tt=t.getMarkAttributes,et=t.getMarkRange,nt=t.getMarkType,ot=t.getMarksBetween,it=t.getNodeAtPosition,rt=t.getNodeAttributes,st=t.getNodeType,lt=t.getRenderedAttributes,at=t.getSchema,dt=t.getSchemaByResolvedExtensions,pt=t.getSchemaTypeByName,ut=t.getSchemaTypeNameByName,ct=t.getSplittedAttributes,gt=t.getText,_t=t.getTextBetween,mt=t.getTextContentFromNodes,xt=t.getTextSerializersFromSchema,kt=t.injectExtensionAttributesToParseRule,bt=t.inputRulesPlugin,yt=t.isActive,ft=t.isAtEndOfNode,ht=t.isAtStartOfNode,Et=t.isEmptyObject,Rt=t.isExtensionRulesEnabled,Pt=t.isFunction,Tt=t.isList,At=t.isMacOS,Ct=t.isMarkActive,St=t.isNodeActive,wt=t.isNodeEmpty,Nt=t.isNodeSelection,Ot=t.isNumber,Bt=t.isPlainObject,It=t.isRegExp,Mt=t.isSafari,vt=t.isString,Ft=t.isTextSelection,Dt=t.isiOS,jt=t.markInputRule,Lt=t.markPasteRule,s=t.mergeAttributes,Ht=t.mergeDeep,Kt=t.minMax,l=t.nodeInputRule,qt=t.nodePasteRule,Gt=t.objectIncludes,zt=t.pasteRulesPlugin,Jt=t.posToDOMRect,Ut=t.removeDuplicates,Vt=t.resolveFocusPosition,Yt=t.rewriteUnknownContent,$t=t.selectionToInsertionEnd,Qt=t.splitExtensions,Wt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,te=t.wrappingInputRule;var g=/(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/,a=r.create({name:"image",addOptions(){return{inline:!1,allowBase64:!1,HTMLAttributes:{}}},inline(){return this.options.inline},group(){return this.options.inline?"inline":"block"},draggable:!0,addAttributes(){return{src:{default:null},alt:{default:null},title:{default:null}}},parseHTML(){return[{tag:this.options.allowBase64?"img[src]":'img[src]:not([src^="data:"])'}]},renderHTML({HTMLAttributes:e}){return["img",s(this.options.HTMLAttributes,e)]},addCommands(){return{setImage:e=>({commands:n})=>n.insertContent({type:this.name,attrs:e})}},addInputRules(){return[l({find:g,type:this.type,getAttributes:e=>{let[,,n,o,c]=e;return{src:o,alt:n,title:c}}})]}});var d="__LEPTOS_TIPTAP_BRIDGE__";function _(){let e=globalThis,n=e[d];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[d]=o,o}function p(){return _()}function u(e){p().registerExtension(e)}function m(e){return{src:e.src,alt:e.alt??void 0,title:e.title??void 0}}var x=a.extend({addAttributes(){return{...this.parent?.(),"data-align":{default:null,parseHTML:e=>e.getAttribute("data-align"),renderHTML:e=>{let n=e["data-align"];return typeof n=="string"&&n.length>0?{"data-align":n}:{}}}}}}),k={name:"image",create:()=>x,commands:{set_image:(e,n)=>n.kind==="set_image"?e.chain().focus().setImage(m(n)).run():!1}};function de(){u(k)}export{de as register_image}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_italic.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_italic.js index b6d0e5e3..d4192d8e 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_italic.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_italic.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var y=t.CommandManager,h=t.Editor,R=t.Extension,f=t.InputRule,a=t.Mark,E=t.Node,P=t.NodePos,C=t.NodeView,T=t.PasteRule,A=t.Tracker,S=t.callOrReturn,N=t.canInsertNode,O=t.combineTransactionSteps,I=t.createChainableState,B=t.createDocument,w=t.createNodeFromContent,M=t.createStyleTag,v=t.defaultBlockAt,F=t.deleteProps,D=t.elementFromString,j=t.escapeForRegEx,L=t.extensions,K=t.findChildren,H=t.findChildrenInRange,q=t.findDuplicates,G=t.findParentNode,z=t.findParentNodeClosestToPos,J=t.fromString,U=t.generateHTML,V=t.generateJSON,Y=t.generateText,$=t.getAttributes,Q=t.getAttributesFromExtensions,W=t.getChangedRanges,X=t.getDebugJSON,Z=t.getExtensionField,tt=t.getHTMLFromFragment,et=t.getMarkAttributes,nt=t.getMarkRange,ot=t.getMarkType,it=t.getMarksBetween,rt=t.getNodeAtPosition,st=t.getNodeAttributes,at=t.getNodeType,lt=t.getRenderedAttributes,dt=t.getSchema,pt=t.getSchemaByResolvedExtensions,ct=t.getSchemaTypeByName,ut=t.getSchemaTypeNameByName,gt=t.getSplittedAttributes,_t=t.getText,xt=t.getTextBetween,mt=t.getTextContentFromNodes,kt=t.getTextSerializersFromSchema,bt=t.injectExtensionAttributesToParseRule,yt=t.inputRulesPlugin,ht=t.isActive,Rt=t.isAtEndOfNode,ft=t.isAtStartOfNode,Et=t.isEmptyObject,Pt=t.isExtensionRulesEnabled,Ct=t.isFunction,Tt=t.isList,At=t.isMacOS,St=t.isMarkActive,Nt=t.isNodeActive,Ot=t.isNodeEmpty,It=t.isNodeSelection,Bt=t.isNumber,wt=t.isPlainObject,Mt=t.isRegExp,vt=t.isSafari,Ft=t.isString,Dt=t.isTextSelection,jt=t.isiOS,o=t.markInputRule,i=t.markPasteRule,l=t.mergeAttributes,Lt=t.mergeDeep,Kt=t.minMax,Ht=t.nodeInputRule,qt=t.nodePasteRule,Gt=t.objectIncludes,zt=t.pasteRulesPlugin,Jt=t.posToDOMRect,Ut=t.removeDuplicates,Vt=t.resolveFocusPosition,Yt=t.rewriteUnknownContent,$t=t.selectionToInsertionEnd,Qt=t.splitExtensions,Wt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,te=t.wrappingInputRule;var g=/(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))$/,_=/(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))/g,x=/(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))$/,m=/(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))/g,d=a.create({name:"italic",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"em"},{tag:"i",getAttrs:e=>e.style.fontStyle!=="normal"&&null},{style:"font-style=normal",clearMark:e=>e.type.name===this.name},{style:"font-style=italic"}]},renderHTML({HTMLAttributes:e}){return["em",l(this.options.HTMLAttributes,e),0]},addCommands(){return{setItalic:()=>({commands:e})=>e.setMark(this.name),toggleItalic:()=>({commands:e})=>e.toggleMark(this.name),unsetItalic:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-i":()=>this.editor.commands.toggleItalic(),"Mod-I":()=>this.editor.commands.toggleItalic()}},addInputRules(){return[o({find:g,type:this.type}),o({find:x,type:this.type})]},addPasteRules(){return[i({find:_,type:this.type}),i({find:m,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function k(){let e=globalThis,r=e[p];if(r!=null)return r;let s={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[p]=s,s}function c(){return k()}function u(e){c().registerExtension(e)}var b={name:"italic",create:()=>d,commands:{set_italic:e=>e.chain().focus().setItalic().run(),toggle_italic:e=>e.chain().focus().toggleItalic().run(),unset_italic:e=>e.chain().focus().unsetItalic().run()},selection_keys:["italic"],selection_state:e=>({italic:e.isActive("italic")})};function de(){u(b)}export{de as register_italic}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var y=t.CommandManager,h=t.Editor,f=t.Extension,R=t.InputRule,l=t.Mark,E=t.Node,P=t.NodePos,C=t.NodeView,T=t.PasteRule,A=t.Tracker,S=t.callOrReturn,w=t.canInsertNode,N=t.combineTransactionSteps,O=t.createChainableState,I=t.createDocument,B=t.createNodeFromContent,M=t.createStyleTag,v=t.defaultBlockAt,F=t.deleteProps,D=t.elementFromString,j=t.escapeForRegEx,L=t.extensions,K=t.findChildren,H=t.findChildrenInRange,q=t.findDuplicates,G=t.findParentNode,z=t.findParentNodeClosestToPos,J=t.fromString,U=t.generateHTML,V=t.generateJSON,Y=t.generateText,$=t.getAttributes,Q=t.getAttributesFromExtensions,W=t.getChangedRanges,X=t.getDebugJSON,Z=t.getExtensionField,tt=t.getHTMLFromFragment,et=t.getMarkAttributes,nt=t.getMarkRange,ot=t.getMarkType,it=t.getMarksBetween,rt=t.getNodeAtPosition,st=t.getNodeAttributes,lt=t.getNodeType,at=t.getRenderedAttributes,dt=t.getSchema,pt=t.getSchemaByResolvedExtensions,ct=t.getSchemaTypeByName,ut=t.getSchemaTypeNameByName,gt=t.getSplittedAttributes,_t=t.getText,mt=t.getTextBetween,xt=t.getTextContentFromNodes,kt=t.getTextSerializersFromSchema,bt=t.injectExtensionAttributesToParseRule,yt=t.inputRulesPlugin,ht=t.isActive,ft=t.isAtEndOfNode,Rt=t.isAtStartOfNode,Et=t.isEmptyObject,Pt=t.isExtensionRulesEnabled,Ct=t.isFunction,Tt=t.isList,At=t.isMacOS,St=t.isMarkActive,wt=t.isNodeActive,Nt=t.isNodeEmpty,Ot=t.isNodeSelection,It=t.isNumber,Bt=t.isPlainObject,Mt=t.isRegExp,vt=t.isSafari,Ft=t.isString,Dt=t.isTextSelection,jt=t.isiOS,o=t.markInputRule,i=t.markPasteRule,a=t.mergeAttributes,Lt=t.mergeDeep,Kt=t.minMax,Ht=t.nodeInputRule,qt=t.nodePasteRule,Gt=t.objectIncludes,zt=t.pasteRulesPlugin,Jt=t.posToDOMRect,Ut=t.removeDuplicates,Vt=t.resolveFocusPosition,Yt=t.rewriteUnknownContent,$t=t.selectionToInsertionEnd,Qt=t.splitExtensions,Wt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,te=t.wrappingInputRule;var g=/(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))$/,_=/(?:^|\s)(\*(?!\s+\*)((?:[^*]+))\*(?!\s+\*))/g,m=/(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))$/,x=/(?:^|\s)(_(?!\s+_)((?:[^_]+))_(?!\s+_))/g,d=l.create({name:"italic",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"em"},{tag:"i",getAttrs:e=>e.style.fontStyle!=="normal"&&null},{style:"font-style=normal",clearMark:e=>e.type.name===this.name},{style:"font-style=italic"}]},renderHTML({HTMLAttributes:e}){return["em",a(this.options.HTMLAttributes,e),0]},addCommands(){return{setItalic:()=>({commands:e})=>e.setMark(this.name),toggleItalic:()=>({commands:e})=>e.toggleMark(this.name),unsetItalic:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-i":()=>this.editor.commands.toggleItalic(),"Mod-I":()=>this.editor.commands.toggleItalic()}},addInputRules(){return[o({find:g,type:this.type}),o({find:m,type:this.type})]},addPasteRules(){return[i({find:_,type:this.type}),i({find:x,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function k(){let e=globalThis,r=e[p];if(r!=null)return r;let s={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[p]=s,s}function c(){return k()}function u(e){c().registerExtension(e)}var b={name:"italic",create:()=>d,commands:{set_italic:e=>e.chain().focus().setItalic().run(),toggle_italic:e=>e.chain().focus().toggleItalic().run(),unset_italic:e=>e.chain().focus().unsetItalic().run()},selection_keys:["italic"],selection_state:e=>({italic:e.isActive("italic")})};function de(){u(b)}export{de as register_italic}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_link.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_link.js index e62e8ab9..2568a89a 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_link.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_link.js @@ -1,5 +1,5 @@ -var Bt=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(Bt==null||Bt.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var r=Bt.modules["@tiptap/core"];if(r==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var kn=r.CommandManager,En=r.Editor,xn=r.Extension,bn=r.InputRule,fe=r.Mark,_n=r.Node,yn=r.NodePos,An=r.NodeView,Tn=r.PasteRule,Rn=r.Tracker,Cn=r.callOrReturn,Sn=r.canInsertNode,me=r.combineTransactionSteps,Ln=r.createChainableState,On=r.createDocument,Pn=r.createNodeFromContent,Nn=r.createStyleTag,In=r.defaultBlockAt,wn=r.deleteProps,vn=r.elementFromString,Dn=r.escapeForRegEx,Mn=r.extensions,Hn=r.findChildren,ke=r.findChildrenInRange,jn=r.findDuplicates,Bn=r.findParentNode,Un=r.findParentNodeClosestToPos,Fn=r.fromString,zn=r.generateHTML,Kn=r.generateJSON,Wn=r.generateText,Ee=r.getAttributes,Gn=r.getAttributesFromExtensions,xe=r.getChangedRanges,Qn=r.getDebugJSON,$n=r.getExtensionField,qn=r.getHTMLFromFragment,Jn=r.getMarkAttributes,Vn=r.getMarkRange,Yn=r.getMarkType,be=r.getMarksBetween,Xn=r.getNodeAtPosition,Zn=r.getNodeAttributes,to=r.getNodeType,eo=r.getRenderedAttributes,no=r.getSchema,oo=r.getSchemaByResolvedExtensions,io=r.getSchemaTypeByName,ro=r.getSchemaTypeNameByName,so=r.getSplittedAttributes,lo=r.getText,ao=r.getTextBetween,co=r.getTextContentFromNodes,uo=r.getTextSerializersFromSchema,po=r.injectExtensionAttributesToParseRule,go=r.inputRulesPlugin,ho=r.isActive,fo=r.isAtEndOfNode,mo=r.isAtStartOfNode,ko=r.isEmptyObject,Eo=r.isExtensionRulesEnabled,xo=r.isFunction,bo=r.isList,_o=r.isMacOS,yo=r.isMarkActive,Ao=r.isNodeActive,To=r.isNodeEmpty,Ro=r.isNodeSelection,Co=r.isNumber,So=r.isPlainObject,Lo=r.isRegExp,Oo=r.isSafari,Po=r.isString,No=r.isTextSelection,Io=r.isiOS,wo=r.markInputRule,_e=r.markPasteRule,Ut=r.mergeAttributes,vo=r.mergeDeep,Do=r.minMax,Mo=r.nodeInputRule,Ho=r.nodePasteRule,jo=r.objectIncludes,Bo=r.pasteRulesPlugin,Uo=r.posToDOMRect,Fo=r.removeDuplicates,zo=r.resolveFocusPosition,Ko=r.rewriteUnknownContent,Wo=r.selectionToInsertionEnd,Go=r.splitExtensions,Qo=r.textInputRule,$o=r.textPasteRule,qo=r.textblockTypeInputRule,Jo=r.wrappingInputRule;var Ge="aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5m\xF6gensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2",Qe="\u03B5\u03BB1\u03C52\u0431\u04331\u0435\u043B3\u0434\u0435\u0442\u04384\u0435\u044E2\u043A\u0430\u0442\u043E\u043B\u0438\u043A6\u043E\u043C3\u043C\u043A\u04342\u043E\u043D1\u0441\u043A\u0432\u04306\u043E\u043D\u043B\u0430\u0439\u043D5\u0440\u04333\u0440\u0443\u04412\u04442\u0441\u0430\u0439\u04423\u0440\u04313\u0443\u043A\u04403\u049B\u0430\u04373\u0570\u0561\u05753\u05D9\u05E9\u05E8\u05D0\u05DC5\u05E7\u05D5\u05DD3\u0627\u0628\u0648\u0638\u0628\u064A5\u0631\u0627\u0645\u0643\u06485\u0644\u0627\u0631\u062F\u06464\u0628\u062D\u0631\u064A\u06465\u062C\u0632\u0627\u0626\u06315\u0633\u0639\u0648\u062F\u064A\u06296\u0639\u0644\u064A\u0627\u06465\u0645\u063A\u0631\u06285\u0645\u0627\u0631\u0627\u062A5\u06CC\u0631\u0627\u06465\u0628\u0627\u0631\u062A2\u0632\u0627\u06314\u064A\u062A\u06433\u06BE\u0627\u0631\u062A5\u062A\u0648\u0646\u06334\u0633\u0648\u062F\u0627\u06463\u0631\u064A\u06295\u0634\u0628\u0643\u06294\u0639\u0631\u0627\u06422\u06282\u0645\u0627\u06464\u0641\u0644\u0633\u0637\u064A\u06466\u0642\u0637\u06313\u0643\u0627\u062B\u0648\u0644\u064A\u06436\u0648\u06453\u0645\u0635\u06312\u0644\u064A\u0633\u064A\u06275\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u06277\u0642\u06394\u0647\u0645\u0631\u0627\u06475\u067E\u0627\u06A9\u0633\u062A\u0627\u06467\u0680\u0627\u0631\u062A4\u0915\u0949\u092E3\u0928\u0947\u091F3\u092D\u093E\u0930\u09240\u092E\u094D3\u094B\u09245\u0938\u0902\u0917\u0920\u09285\u09AC\u09BE\u0982\u09B2\u09BE5\u09AD\u09BE\u09B0\u09A42\u09F0\u09A44\u0A2D\u0A3E\u0A30\u0A244\u0AAD\u0ABE\u0AB0\u0AA44\u0B2D\u0B3E\u0B30\u0B244\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE6\u0BB2\u0B99\u0BCD\u0B95\u0BC86\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD11\u0C2D\u0C3E\u0C30\u0C24\u0C4D5\u0CAD\u0CBE\u0CB0\u0CA44\u0D2D\u0D3E\u0D30\u0D24\u0D025\u0DBD\u0D82\u0D9A\u0DCF4\u0E04\u0E2D\u0E213\u0E44\u0E17\u0E223\u0EA5\u0EB2\u0EA73\u10D2\u10D42\u307F\u3093\u306A3\u30A2\u30DE\u30BE\u30F34\u30AF\u30E9\u30A6\u30C94\u30B0\u30FC\u30B0\u30EB4\u30B3\u30E02\u30B9\u30C8\u30A23\u30BB\u30FC\u30EB3\u30D5\u30A1\u30C3\u30B7\u30E7\u30F36\u30DD\u30A4\u30F3\u30C84\u4E16\u754C2\u4E2D\u4FE11\u56FD1\u570B1\u6587\u7F513\u4E9A\u9A6C\u900A3\u4F01\u4E1A2\u4F5B\u5C712\u4FE1\u606F2\u5065\u5EB72\u516B\u53662\u516C\u53F81\u76CA2\u53F0\u6E7E1\u70632\u5546\u57CE1\u5E971\u68072\u5609\u91CC0\u5927\u9152\u5E975\u5728\u7EBF2\u5927\u62FF2\u5929\u4E3B\u65593\u5A31\u4E502\u5BB6\u96FB2\u5E7F\u4E1C2\u5FAE\u535A2\u6148\u55842\u6211\u7231\u4F603\u624B\u673A2\u62DB\u80582\u653F\u52A11\u5E9C2\u65B0\u52A0\u57612\u95FB2\u65F6\u5C1A2\u66F8\u7C4D2\u673A\u67842\u6DE1\u9A6C\u95213\u6E38\u620F2\u6FB3\u95802\u70B9\u770B2\u79FB\u52A82\u7EC4\u7EC7\u673A\u67844\u7F51\u57401\u5E971\u7AD91\u7EDC2\u8054\u901A2\u8C37\u6B4C2\u8D2D\u72692\u901A\u8CA92\u96C6\u56E22\u96FB\u8A0A\u76C8\u79D14\u98DE\u5229\u6D663\u98DF\u54C12\u9910\u53852\u9999\u683C\u91CC\u62C93\u6E2F2\uB2F7\uB1371\uCEF42\uC0BC\uC1312\uD55C\uAD6D2",$t="numeric",qt="ascii",Jt="alpha",G="asciinumeric",W="alphanumeric",Vt="domain",Le="emoji",$e="scheme",qe="slashscheme",Ft="whitespace";function Je(t,n){return t in n||(n[t]=[]),n[t]}function H(t,n,e){n[$t]&&(n[G]=!0,n[W]=!0),n[qt]&&(n[G]=!0,n[Jt]=!0),n[G]&&(n[W]=!0),n[Jt]&&(n[W]=!0),n[W]&&(n[Vt]=!0),n[Le]&&(n[Vt]=!0);for(let o in n){let i=Je(o,e);i.indexOf(t)<0&&i.push(t)}}function Ve(t,n){let e={};for(let o in n)n[o].indexOf(t)>=0&&(e[o]=!0);return e}function T(t=null){this.j={},this.jr=[],this.jd=null,this.t=t}T.groups={};T.prototype={accepts(){return!!this.t},go(t){let n=this,e=n.j[t];if(e)return e;for(let o=0;ot.ta(n,e,o,i),x=(t,n,e,o,i)=>t.tr(n,e,o,i),ye=(t,n,e,o,i)=>t.ts(n,e,o,i),s=(t,n,e,o,i)=>t.tt(n,e,o,i),w="WORD",Yt="UWORD",Oe="ASCIINUMERICAL",Pe="ALPHANUMERICAL",Y="LOCALHOST",Xt="TLD",Zt="UTLD",ot="SCHEME",U="SLASH_SCHEME",ee="NUM",te="WS",ne="NL",Q="OPENBRACE",$="CLOSEBRACE",it="OPENBRACKET",rt="CLOSEBRACKET",st="OPENPAREN",lt="CLOSEPAREN",at="OPENANGLEBRACKET",ct="CLOSEANGLEBRACKET",ut="FULLWIDTHLEFTPAREN",dt="FULLWIDTHRIGHTPAREN",pt="LEFTCORNERBRACKET",gt="RIGHTCORNERBRACKET",ht="LEFTWHITECORNERBRACKET",ft="RIGHTWHITECORNERBRACKET",mt="FULLWIDTHLESSTHAN",kt="FULLWIDTHGREATERTHAN",Et="AMPERSAND",xt="APOSTROPHE",bt="ASTERISK",D="AT",_t="BACKSLASH",yt="BACKTICK",At="CARET",M="COLON",oe="COMMA",Tt="DOLLAR",L="DOT",Rt="EQUALS",ie="EXCLAMATION",S="HYPHEN",q="PERCENT",Ct="PIPE",St="PLUS",Lt="POUND",J="QUERY",re="QUOTE",Ne="FULLWIDTHMIDDLEDOT",se="SEMI",O="SLASH",V="TILDE",Ot="UNDERSCORE",Ie="EMOJI",Pt="SYM",we=Object.freeze({__proto__:null,ALPHANUMERICAL:Pe,AMPERSAND:Et,APOSTROPHE:xt,ASCIINUMERICAL:Oe,ASTERISK:bt,AT:D,BACKSLASH:_t,BACKTICK:yt,CARET:At,CLOSEANGLEBRACKET:ct,CLOSEBRACE:$,CLOSEBRACKET:rt,CLOSEPAREN:lt,COLON:M,COMMA:oe,DOLLAR:Tt,DOT:L,EMOJI:Ie,EQUALS:Rt,EXCLAMATION:ie,FULLWIDTHGREATERTHAN:kt,FULLWIDTHLEFTPAREN:ut,FULLWIDTHLESSTHAN:mt,FULLWIDTHMIDDLEDOT:Ne,FULLWIDTHRIGHTPAREN:dt,HYPHEN:S,LEFTCORNERBRACKET:pt,LEFTWHITECORNERBRACKET:ht,LOCALHOST:Y,NL:ne,NUM:ee,OPENANGLEBRACKET:at,OPENBRACE:Q,OPENBRACKET:it,OPENPAREN:st,PERCENT:q,PIPE:Ct,PLUS:St,POUND:Lt,QUERY:J,QUOTE:re,RIGHTCORNERBRACKET:gt,RIGHTWHITECORNERBRACKET:ft,SCHEME:ot,SEMI:se,SLASH:O,SLASH_SCHEME:U,SYM:Pt,TILDE:V,TLD:Xt,UNDERSCORE:Ot,UTLD:Zt,UWORD:Yt,WORD:w,WS:te}),N=/[a-z]/,K=/\p{L}/u,zt=/\p{Emoji}/u;var I=/\d/,Kt=/\s/;var Ae="\r",Wt=` -`,Ye="\uFE0F",Xe="\u200D",Gt="\uFFFC",tt=null,et=null;function Ze(t=[]){let n={};T.groups=n;let e=new T;tt==null&&(tt=Te(Ge)),et==null&&(et=Te(Qe)),s(e,"'",xt),s(e,"{",Q),s(e,"}",$),s(e,"[",it),s(e,"]",rt),s(e,"(",st),s(e,")",lt),s(e,"<",at),s(e,">",ct),s(e,"\uFF08",ut),s(e,"\uFF09",dt),s(e,"\u300C",pt),s(e,"\u300D",gt),s(e,"\u300E",ht),s(e,"\u300F",ft),s(e,"\uFF1C",mt),s(e,"\uFF1E",kt),s(e,"&",Et),s(e,"*",bt),s(e,"@",D),s(e,"`",yt),s(e,"^",At),s(e,":",M),s(e,",",oe),s(e,"$",Tt),s(e,".",L),s(e,"=",Rt),s(e,"!",ie),s(e,"-",S),s(e,"%",q),s(e,"|",Ct),s(e,"+",St),s(e,"#",Lt),s(e,"?",J),s(e,'"',re),s(e,"/",O),s(e,";",se),s(e,"~",V),s(e,"_",Ot),s(e,"\\",_t),s(e,"\u30FB",Ne);let o=x(e,I,ee,{[$t]:!0});x(o,I,o);let i=x(o,N,Oe,{[G]:!0}),l=x(o,K,Pe,{[W]:!0}),a=x(e,N,w,{[qt]:!0});x(a,I,i),x(a,N,a),x(i,I,i),x(i,N,i);let c=x(e,K,Yt,{[Jt]:!0});x(c,N),x(c,I,l),x(c,K,c),x(l,I,l),x(l,N),x(l,K,l);let g=s(e,Wt,ne,{[Ft]:!0}),u=s(e,Ae,te,{[Ft]:!0}),h=x(e,Kt,te,{[Ft]:!0});s(e,Gt,h),s(u,Wt,g),s(u,Gt,h),x(u,Kt,h),s(h,Ae),s(h,Wt),x(h,Kt,h),s(h,Gt,h);let p=x(e,zt,Ie,{[Le]:!0});s(p,"#"),x(p,zt,p),s(p,Ye,p);let m=s(p,Xe);s(m,"#"),x(m,zt,p);let k=[[N,a],[I,i]],R=[[N,null],[K,c],[I,l]];for(let b=0;bb[0]>y[0]?1:-1);for(let b=0;b=0?_[Vt]=!0:N.test(y)?I.test(y)?_[G]=!0:_[qt]=!0:_[$t]=!0,ye(e,y,y,_)}return ye(e,"localhost",Y,{ascii:!0}),e.jd=new T(Pt),{start:e,tokens:Object.assign({groups:n},we)}}function ve(t,n){let e=tn(n.replace(/[A-Z]/g,c=>c.toLowerCase())),o=e.length,i=[],l=0,a=0;for(;a=0&&(p+=e[a].length,m++),u+=e[a].length,l+=e[a].length,a++;l-=p,a-=m,u-=p,i.push({t:h.t,v:n.slice(l-u,l),s:l-u,e:l})}return i}function tn(t){let n=[],e=t.length,o=0;for(;o56319||o+1===e||(l=t.charCodeAt(o+1))<56320||l>57343?t[o]:t.slice(o,o+2);n.push(a),o+=a.length}return n}function v(t,n,e,o,i){let l,a=n.length;for(let c=0;c=0;)l++;if(l>0){n.push(e.join(""));for(let a=parseInt(t.substring(o,o+l),10);a>0;a--)e.pop();o+=l}else e.push(t[o]),o++}return n}var X={defaultProtocol:"http",events:null,format:Re,formatHref:Re,nl2br:!1,tagName:"a",target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function le(t,n=null){let e=Object.assign({},X);t&&(e=Object.assign(e,t instanceof le?t.o:t));let o=e.ignoreTags,i=[];for(let l=0;le?o.substring(0,e)+"\u2026":o},toFormattedHref(t){return t.get("formatHref",this.toHref(t.get("defaultProtocol")),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(t=X.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(t),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(t){return{type:this.t,value:this.toFormattedString(t),isLink:this.isLink,href:this.toFormattedHref(t),start:this.startIndex(),end:this.endIndex()}},validate(t){return t.get("validate",this.toString(),this)},render(t){let n=this,e=this.toHref(t.get("defaultProtocol")),o=t.get("formatHref",e,this),i=t.get("tagName",e,n),l=this.toFormattedString(t),a={},c=t.get("className",e,n),g=t.get("target",e,n),u=t.get("rel",e,n),h=t.getObj("attributes",e,n),p=t.getObj("events",e,n);return a.href=o,c&&(a.class=c),g&&(a.target=g),u&&(a.rel=u),h&&Object.assign(a,h),{tagName:i,attributes:a,content:l,eventListeners:p}}};function Nt(t,n){class e extends De{constructor(i,l){super(i,l),this.t=t}}for(let o in n)e.prototype[o]=n[o];return e.t=t,e}var Ce=Nt("email",{isLink:!0,toHref(){return"mailto:"+this.toString()}}),Se=Nt("text"),en=Nt("nl"),nt=Nt("url",{isLink:!0,toHref(t=X.defaultProtocol){return this.hasProtocol()?this.v:`${t}://${this.v}`},hasProtocol(){let t=this.tk;return t.length>=2&&t[0].t!==Y&&t[1].t===M}});var C=t=>new T(t);function nn({groups:t}){let n=t.domain.concat([Et,bt,D,_t,yt,At,Tt,Rt,S,ee,q,Ct,St,Lt,O,Pt,V,Ot]),e=[xt,M,oe,L,ie,q,J,re,se,at,ct,Q,$,rt,it,st,lt,ut,dt,pt,gt,ht,ft,mt,kt],o=[Et,xt,bt,_t,yt,At,Tt,Rt,S,Q,$,q,Ct,St,Lt,J,O,Pt,V,Ot],i=C(),l=s(i,V);d(l,o,l),d(l,t.domain,l);let a=C(),c=C(),g=C();d(i,t.domain,a),d(i,t.scheme,c),d(i,t.slashscheme,g),d(a,o,l),d(a,t.domain,a);let u=s(a,D);s(l,D,u),s(c,D,u),s(g,D,u);let h=s(l,L);d(h,o,l),d(h,t.domain,l);let p=C();d(u,t.domain,p),d(p,t.domain,p);let m=s(p,L);d(m,t.domain,p);let k=C(Ce);d(m,t.tld,k),d(m,t.utld,k),s(u,Y,k);let R=s(p,S);s(R,S,R),d(R,t.domain,p),d(k,t.domain,p),s(k,L,m),s(k,S,R);let b=s(k,M);d(b,t.numeric,Ce);let y=s(a,S),f=s(a,L);s(y,S,y),d(y,t.domain,a),d(f,o,l),d(f,t.domain,a);let _=C(nt);d(f,t.tld,_),d(f,t.utld,_),d(_,t.domain,a),d(_,o,l),s(_,L,f),s(_,S,y),s(_,D,u);let ze=s(_,M),pe=C(nt);d(ze,t.numeric,pe);let A=C(nt),F=C();d(A,n,A),d(A,e,F),d(F,n,A),d(F,e,F),s(_,O,A),s(pe,O,A);let Dt=s(c,M),Ke=s(g,M),We=s(Ke,O),Mt=s(We,O);d(c,t.domain,a),s(c,L,f),s(c,S,y),d(g,t.domain,a),s(g,L,f),s(g,S,y),d(Dt,t.domain,A),s(Dt,O,A),s(Dt,J,A),d(Mt,t.domain,A),d(Mt,n,A),s(Mt,O,A);let ge=[[Q,$],[it,rt],[st,lt],[at,ct],[ut,dt],[pt,gt],[ht,ft],[mt,kt]];for(let Ht=0;Ht=0&&m++,i++,h++;if(m<0)i-=h,i0&&(l.push(Qt(Se,n,a)),a=[]),i-=m,h-=m;let k=p.t,R=e.slice(i-h,i);l.push(Qt(k,n,R))}}return a.length>0&&l.push(Qt(Se,n,a)),l}function Qt(t,n,e){let o=e[0].s,i=e[e.length-1].e,l=n.slice(o,i);return new t(l,e)}var rn=typeof console<"u"&&console&&console.warn||(()=>{}),sn="until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.",E={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function Me(){return T.groups={},E.scanner=null,E.parser=null,E.tokenQueue=[],E.pluginQueue=[],E.customSchemes=[],E.initialized=!1,E}function ae(t,n=!1){if(E.initialized&&rn(`linkifyjs: already initialized - will not register custom scheme "${t}" ${sn}`),!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(t))throw new Error(`linkifyjs: incorrect scheme format. +var Bt=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(Bt==null||Bt.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var r=Bt.modules["@tiptap/core"];if(r==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var kn=r.CommandManager,En=r.Editor,bn=r.Extension,xn=r.InputRule,fe=r.Mark,_n=r.Node,yn=r.NodePos,An=r.NodeView,Tn=r.PasteRule,Rn=r.Tracker,Cn=r.callOrReturn,Sn=r.canInsertNode,me=r.combineTransactionSteps,Ln=r.createChainableState,On=r.createDocument,Pn=r.createNodeFromContent,Nn=r.createStyleTag,wn=r.defaultBlockAt,In=r.deleteProps,vn=r.elementFromString,Dn=r.escapeForRegEx,Mn=r.extensions,Hn=r.findChildren,ke=r.findChildrenInRange,jn=r.findDuplicates,Bn=r.findParentNode,Un=r.findParentNodeClosestToPos,Fn=r.fromString,zn=r.generateHTML,Kn=r.generateJSON,Wn=r.generateText,Ee=r.getAttributes,Gn=r.getAttributesFromExtensions,be=r.getChangedRanges,Qn=r.getDebugJSON,$n=r.getExtensionField,qn=r.getHTMLFromFragment,Jn=r.getMarkAttributes,Vn=r.getMarkRange,Yn=r.getMarkType,xe=r.getMarksBetween,Xn=r.getNodeAtPosition,Zn=r.getNodeAttributes,to=r.getNodeType,eo=r.getRenderedAttributes,no=r.getSchema,oo=r.getSchemaByResolvedExtensions,io=r.getSchemaTypeByName,ro=r.getSchemaTypeNameByName,so=r.getSplittedAttributes,lo=r.getText,ao=r.getTextBetween,co=r.getTextContentFromNodes,uo=r.getTextSerializersFromSchema,po=r.injectExtensionAttributesToParseRule,go=r.inputRulesPlugin,ho=r.isActive,fo=r.isAtEndOfNode,mo=r.isAtStartOfNode,ko=r.isEmptyObject,Eo=r.isExtensionRulesEnabled,bo=r.isFunction,xo=r.isList,_o=r.isMacOS,yo=r.isMarkActive,Ao=r.isNodeActive,To=r.isNodeEmpty,Ro=r.isNodeSelection,Co=r.isNumber,So=r.isPlainObject,Lo=r.isRegExp,Oo=r.isSafari,Po=r.isString,No=r.isTextSelection,wo=r.isiOS,Io=r.markInputRule,_e=r.markPasteRule,Ut=r.mergeAttributes,vo=r.mergeDeep,Do=r.minMax,Mo=r.nodeInputRule,Ho=r.nodePasteRule,jo=r.objectIncludes,Bo=r.pasteRulesPlugin,Uo=r.posToDOMRect,Fo=r.removeDuplicates,zo=r.resolveFocusPosition,Ko=r.rewriteUnknownContent,Wo=r.selectionToInsertionEnd,Go=r.splitExtensions,Qo=r.textInputRule,$o=r.textPasteRule,qo=r.textblockTypeInputRule,Jo=r.wrappingInputRule;var Ge="aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5m\xF6gensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2",Qe="\u03B5\u03BB1\u03C52\u0431\u04331\u0435\u043B3\u0434\u0435\u0442\u04384\u0435\u044E2\u043A\u0430\u0442\u043E\u043B\u0438\u043A6\u043E\u043C3\u043C\u043A\u04342\u043E\u043D1\u0441\u043A\u0432\u04306\u043E\u043D\u043B\u0430\u0439\u043D5\u0440\u04333\u0440\u0443\u04412\u04442\u0441\u0430\u0439\u04423\u0440\u04313\u0443\u043A\u04403\u049B\u0430\u04373\u0570\u0561\u05753\u05D9\u05E9\u05E8\u05D0\u05DC5\u05E7\u05D5\u05DD3\u0627\u0628\u0648\u0638\u0628\u064A5\u0631\u0627\u0645\u0643\u06485\u0644\u0627\u0631\u062F\u06464\u0628\u062D\u0631\u064A\u06465\u062C\u0632\u0627\u0626\u06315\u0633\u0639\u0648\u062F\u064A\u06296\u0639\u0644\u064A\u0627\u06465\u0645\u063A\u0631\u06285\u0645\u0627\u0631\u0627\u062A5\u06CC\u0631\u0627\u06465\u0628\u0627\u0631\u062A2\u0632\u0627\u06314\u064A\u062A\u06433\u06BE\u0627\u0631\u062A5\u062A\u0648\u0646\u06334\u0633\u0648\u062F\u0627\u06463\u0631\u064A\u06295\u0634\u0628\u0643\u06294\u0639\u0631\u0627\u06422\u06282\u0645\u0627\u06464\u0641\u0644\u0633\u0637\u064A\u06466\u0642\u0637\u06313\u0643\u0627\u062B\u0648\u0644\u064A\u06436\u0648\u06453\u0645\u0635\u06312\u0644\u064A\u0633\u064A\u06275\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u06277\u0642\u06394\u0647\u0645\u0631\u0627\u06475\u067E\u0627\u06A9\u0633\u062A\u0627\u06467\u0680\u0627\u0631\u062A4\u0915\u0949\u092E3\u0928\u0947\u091F3\u092D\u093E\u0930\u09240\u092E\u094D3\u094B\u09245\u0938\u0902\u0917\u0920\u09285\u09AC\u09BE\u0982\u09B2\u09BE5\u09AD\u09BE\u09B0\u09A42\u09F0\u09A44\u0A2D\u0A3E\u0A30\u0A244\u0AAD\u0ABE\u0AB0\u0AA44\u0B2D\u0B3E\u0B30\u0B244\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE6\u0BB2\u0B99\u0BCD\u0B95\u0BC86\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD11\u0C2D\u0C3E\u0C30\u0C24\u0C4D5\u0CAD\u0CBE\u0CB0\u0CA44\u0D2D\u0D3E\u0D30\u0D24\u0D025\u0DBD\u0D82\u0D9A\u0DCF4\u0E04\u0E2D\u0E213\u0E44\u0E17\u0E223\u0EA5\u0EB2\u0EA73\u10D2\u10D42\u307F\u3093\u306A3\u30A2\u30DE\u30BE\u30F34\u30AF\u30E9\u30A6\u30C94\u30B0\u30FC\u30B0\u30EB4\u30B3\u30E02\u30B9\u30C8\u30A23\u30BB\u30FC\u30EB3\u30D5\u30A1\u30C3\u30B7\u30E7\u30F36\u30DD\u30A4\u30F3\u30C84\u4E16\u754C2\u4E2D\u4FE11\u56FD1\u570B1\u6587\u7F513\u4E9A\u9A6C\u900A3\u4F01\u4E1A2\u4F5B\u5C712\u4FE1\u606F2\u5065\u5EB72\u516B\u53662\u516C\u53F81\u76CA2\u53F0\u6E7E1\u70632\u5546\u57CE1\u5E971\u68072\u5609\u91CC0\u5927\u9152\u5E975\u5728\u7EBF2\u5927\u62FF2\u5929\u4E3B\u65593\u5A31\u4E502\u5BB6\u96FB2\u5E7F\u4E1C2\u5FAE\u535A2\u6148\u55842\u6211\u7231\u4F603\u624B\u673A2\u62DB\u80582\u653F\u52A11\u5E9C2\u65B0\u52A0\u57612\u95FB2\u65F6\u5C1A2\u66F8\u7C4D2\u673A\u67842\u6DE1\u9A6C\u95213\u6E38\u620F2\u6FB3\u95802\u70B9\u770B2\u79FB\u52A82\u7EC4\u7EC7\u673A\u67844\u7F51\u57401\u5E971\u7AD91\u7EDC2\u8054\u901A2\u8C37\u6B4C2\u8D2D\u72692\u901A\u8CA92\u96C6\u56E22\u96FB\u8A0A\u76C8\u79D14\u98DE\u5229\u6D663\u98DF\u54C12\u9910\u53852\u9999\u683C\u91CC\u62C93\u6E2F2\uB2F7\uB1371\uCEF42\uC0BC\uC1312\uD55C\uAD6D2",$t="numeric",qt="ascii",Jt="alpha",G="asciinumeric",W="alphanumeric",Vt="domain",Le="emoji",$e="scheme",qe="slashscheme",Ft="whitespace";function Je(t,n){return t in n||(n[t]=[]),n[t]}function H(t,n,e){n[$t]&&(n[G]=!0,n[W]=!0),n[qt]&&(n[G]=!0,n[Jt]=!0),n[G]&&(n[W]=!0),n[Jt]&&(n[W]=!0),n[W]&&(n[Vt]=!0),n[Le]&&(n[Vt]=!0);for(let o in n){let i=Je(o,e);i.indexOf(t)<0&&i.push(t)}}function Ve(t,n){let e={};for(let o in n)n[o].indexOf(t)>=0&&(e[o]=!0);return e}function T(t=null){this.j={},this.jr=[],this.jd=null,this.t=t}T.groups={};T.prototype={accepts(){return!!this.t},go(t){let n=this,e=n.j[t];if(e)return e;for(let o=0;ot.ta(n,e,o,i),b=(t,n,e,o,i)=>t.tr(n,e,o,i),ye=(t,n,e,o,i)=>t.ts(n,e,o,i),s=(t,n,e,o,i)=>t.tt(n,e,o,i),I="WORD",Yt="UWORD",Oe="ASCIINUMERICAL",Pe="ALPHANUMERICAL",Y="LOCALHOST",Xt="TLD",Zt="UTLD",ot="SCHEME",U="SLASH_SCHEME",ee="NUM",te="WS",ne="NL",Q="OPENBRACE",$="CLOSEBRACE",it="OPENBRACKET",rt="CLOSEBRACKET",st="OPENPAREN",lt="CLOSEPAREN",at="OPENANGLEBRACKET",ct="CLOSEANGLEBRACKET",ut="FULLWIDTHLEFTPAREN",dt="FULLWIDTHRIGHTPAREN",pt="LEFTCORNERBRACKET",gt="RIGHTCORNERBRACKET",ht="LEFTWHITECORNERBRACKET",ft="RIGHTWHITECORNERBRACKET",mt="FULLWIDTHLESSTHAN",kt="FULLWIDTHGREATERTHAN",Et="AMPERSAND",bt="APOSTROPHE",xt="ASTERISK",D="AT",_t="BACKSLASH",yt="BACKTICK",At="CARET",M="COLON",oe="COMMA",Tt="DOLLAR",L="DOT",Rt="EQUALS",ie="EXCLAMATION",S="HYPHEN",q="PERCENT",Ct="PIPE",St="PLUS",Lt="POUND",J="QUERY",re="QUOTE",Ne="FULLWIDTHMIDDLEDOT",se="SEMI",O="SLASH",V="TILDE",Ot="UNDERSCORE",we="EMOJI",Pt="SYM",Ie=Object.freeze({__proto__:null,ALPHANUMERICAL:Pe,AMPERSAND:Et,APOSTROPHE:bt,ASCIINUMERICAL:Oe,ASTERISK:xt,AT:D,BACKSLASH:_t,BACKTICK:yt,CARET:At,CLOSEANGLEBRACKET:ct,CLOSEBRACE:$,CLOSEBRACKET:rt,CLOSEPAREN:lt,COLON:M,COMMA:oe,DOLLAR:Tt,DOT:L,EMOJI:we,EQUALS:Rt,EXCLAMATION:ie,FULLWIDTHGREATERTHAN:kt,FULLWIDTHLEFTPAREN:ut,FULLWIDTHLESSTHAN:mt,FULLWIDTHMIDDLEDOT:Ne,FULLWIDTHRIGHTPAREN:dt,HYPHEN:S,LEFTCORNERBRACKET:pt,LEFTWHITECORNERBRACKET:ht,LOCALHOST:Y,NL:ne,NUM:ee,OPENANGLEBRACKET:at,OPENBRACE:Q,OPENBRACKET:it,OPENPAREN:st,PERCENT:q,PIPE:Ct,PLUS:St,POUND:Lt,QUERY:J,QUOTE:re,RIGHTCORNERBRACKET:gt,RIGHTWHITECORNERBRACKET:ft,SCHEME:ot,SEMI:se,SLASH:O,SLASH_SCHEME:U,SYM:Pt,TILDE:V,TLD:Xt,UNDERSCORE:Ot,UTLD:Zt,UWORD:Yt,WORD:I,WS:te}),N=/[a-z]/,K=/\p{L}/u,zt=/\p{Emoji}/u;var w=/\d/,Kt=/\s/;var Ae="\r",Wt=` +`,Ye="\uFE0F",Xe="\u200D",Gt="\uFFFC",tt=null,et=null;function Ze(t=[]){let n={};T.groups=n;let e=new T;tt==null&&(tt=Te(Ge)),et==null&&(et=Te(Qe)),s(e,"'",bt),s(e,"{",Q),s(e,"}",$),s(e,"[",it),s(e,"]",rt),s(e,"(",st),s(e,")",lt),s(e,"<",at),s(e,">",ct),s(e,"\uFF08",ut),s(e,"\uFF09",dt),s(e,"\u300C",pt),s(e,"\u300D",gt),s(e,"\u300E",ht),s(e,"\u300F",ft),s(e,"\uFF1C",mt),s(e,"\uFF1E",kt),s(e,"&",Et),s(e,"*",xt),s(e,"@",D),s(e,"`",yt),s(e,"^",At),s(e,":",M),s(e,",",oe),s(e,"$",Tt),s(e,".",L),s(e,"=",Rt),s(e,"!",ie),s(e,"-",S),s(e,"%",q),s(e,"|",Ct),s(e,"+",St),s(e,"#",Lt),s(e,"?",J),s(e,'"',re),s(e,"/",O),s(e,";",se),s(e,"~",V),s(e,"_",Ot),s(e,"\\",_t),s(e,"\u30FB",Ne);let o=b(e,w,ee,{[$t]:!0});b(o,w,o);let i=b(o,N,Oe,{[G]:!0}),l=b(o,K,Pe,{[W]:!0}),a=b(e,N,I,{[qt]:!0});b(a,w,i),b(a,N,a),b(i,w,i),b(i,N,i);let c=b(e,K,Yt,{[Jt]:!0});b(c,N),b(c,w,l),b(c,K,c),b(l,w,l),b(l,N),b(l,K,l);let g=s(e,Wt,ne,{[Ft]:!0}),u=s(e,Ae,te,{[Ft]:!0}),h=b(e,Kt,te,{[Ft]:!0});s(e,Gt,h),s(u,Wt,g),s(u,Gt,h),b(u,Kt,h),s(h,Ae),s(h,Wt),b(h,Kt,h),s(h,Gt,h);let p=b(e,zt,we,{[Le]:!0});s(p,"#"),b(p,zt,p),s(p,Ye,p);let m=s(p,Xe);s(m,"#"),b(m,zt,p);let k=[[N,a],[w,i]],R=[[N,null],[K,c],[w,l]];for(let x=0;xx[0]>y[0]?1:-1);for(let x=0;x=0?_[Vt]=!0:N.test(y)?w.test(y)?_[G]=!0:_[qt]=!0:_[$t]=!0,ye(e,y,y,_)}return ye(e,"localhost",Y,{ascii:!0}),e.jd=new T(Pt),{start:e,tokens:Object.assign({groups:n},Ie)}}function ve(t,n){let e=tn(n.replace(/[A-Z]/g,c=>c.toLowerCase())),o=e.length,i=[],l=0,a=0;for(;a=0&&(p+=e[a].length,m++),u+=e[a].length,l+=e[a].length,a++;l-=p,a-=m,u-=p,i.push({t:h.t,v:n.slice(l-u,l),s:l-u,e:l})}return i}function tn(t){let n=[],e=t.length,o=0;for(;o56319||o+1===e||(l=t.charCodeAt(o+1))<56320||l>57343?t[o]:t.slice(o,o+2);n.push(a),o+=a.length}return n}function v(t,n,e,o,i){let l,a=n.length;for(let c=0;c=0;)l++;if(l>0){n.push(e.join(""));for(let a=parseInt(t.substring(o,o+l),10);a>0;a--)e.pop();o+=l}else e.push(t[o]),o++}return n}var X={defaultProtocol:"http",events:null,format:Re,formatHref:Re,nl2br:!1,tagName:"a",target:null,rel:null,validate:!0,truncate:1/0,className:null,attributes:null,ignoreTags:[],render:null};function le(t,n=null){let e=Object.assign({},X);t&&(e=Object.assign(e,t instanceof le?t.o:t));let o=e.ignoreTags,i=[];for(let l=0;le?o.substring(0,e)+"\u2026":o},toFormattedHref(t){return t.get("formatHref",this.toHref(t.get("defaultProtocol")),this)},startIndex(){return this.tk[0].s},endIndex(){return this.tk[this.tk.length-1].e},toObject(t=X.defaultProtocol){return{type:this.t,value:this.toString(),isLink:this.isLink,href:this.toHref(t),start:this.startIndex(),end:this.endIndex()}},toFormattedObject(t){return{type:this.t,value:this.toFormattedString(t),isLink:this.isLink,href:this.toFormattedHref(t),start:this.startIndex(),end:this.endIndex()}},validate(t){return t.get("validate",this.toString(),this)},render(t){let n=this,e=this.toHref(t.get("defaultProtocol")),o=t.get("formatHref",e,this),i=t.get("tagName",e,n),l=this.toFormattedString(t),a={},c=t.get("className",e,n),g=t.get("target",e,n),u=t.get("rel",e,n),h=t.getObj("attributes",e,n),p=t.getObj("events",e,n);return a.href=o,c&&(a.class=c),g&&(a.target=g),u&&(a.rel=u),h&&Object.assign(a,h),{tagName:i,attributes:a,content:l,eventListeners:p}}};function Nt(t,n){class e extends De{constructor(i,l){super(i,l),this.t=t}}for(let o in n)e.prototype[o]=n[o];return e.t=t,e}var Ce=Nt("email",{isLink:!0,toHref(){return"mailto:"+this.toString()}}),Se=Nt("text"),en=Nt("nl"),nt=Nt("url",{isLink:!0,toHref(t=X.defaultProtocol){return this.hasProtocol()?this.v:`${t}://${this.v}`},hasProtocol(){let t=this.tk;return t.length>=2&&t[0].t!==Y&&t[1].t===M}});var C=t=>new T(t);function nn({groups:t}){let n=t.domain.concat([Et,xt,D,_t,yt,At,Tt,Rt,S,ee,q,Ct,St,Lt,O,Pt,V,Ot]),e=[bt,M,oe,L,ie,q,J,re,se,at,ct,Q,$,rt,it,st,lt,ut,dt,pt,gt,ht,ft,mt,kt],o=[Et,bt,xt,_t,yt,At,Tt,Rt,S,Q,$,q,Ct,St,Lt,J,O,Pt,V,Ot],i=C(),l=s(i,V);d(l,o,l),d(l,t.domain,l);let a=C(),c=C(),g=C();d(i,t.domain,a),d(i,t.scheme,c),d(i,t.slashscheme,g),d(a,o,l),d(a,t.domain,a);let u=s(a,D);s(l,D,u),s(c,D,u),s(g,D,u);let h=s(l,L);d(h,o,l),d(h,t.domain,l);let p=C();d(u,t.domain,p),d(p,t.domain,p);let m=s(p,L);d(m,t.domain,p);let k=C(Ce);d(m,t.tld,k),d(m,t.utld,k),s(u,Y,k);let R=s(p,S);s(R,S,R),d(R,t.domain,p),d(k,t.domain,p),s(k,L,m),s(k,S,R);let x=s(k,M);d(x,t.numeric,Ce);let y=s(a,S),f=s(a,L);s(y,S,y),d(y,t.domain,a),d(f,o,l),d(f,t.domain,a);let _=C(nt);d(f,t.tld,_),d(f,t.utld,_),d(_,t.domain,a),d(_,o,l),s(_,L,f),s(_,S,y),s(_,D,u);let ze=s(_,M),pe=C(nt);d(ze,t.numeric,pe);let A=C(nt),F=C();d(A,n,A),d(A,e,F),d(F,n,A),d(F,e,F),s(_,O,A),s(pe,O,A);let Dt=s(c,M),Ke=s(g,M),We=s(Ke,O),Mt=s(We,O);d(c,t.domain,a),s(c,L,f),s(c,S,y),d(g,t.domain,a),s(g,L,f),s(g,S,y),d(Dt,t.domain,A),s(Dt,O,A),s(Dt,J,A),d(Mt,t.domain,A),d(Mt,n,A),s(Mt,O,A);let ge=[[Q,$],[it,rt],[st,lt],[at,ct],[ut,dt],[pt,gt],[ht,ft],[mt,kt]];for(let Ht=0;Ht=0&&m++,i++,h++;if(m<0)i-=h,i0&&(l.push(Qt(Se,n,a)),a=[]),i-=m,h-=m;let k=p.t,R=e.slice(i-h,i);l.push(Qt(k,n,R))}}return a.length>0&&l.push(Qt(Se,n,a)),l}function Qt(t,n,e){let o=e[0].s,i=e[e.length-1].e,l=n.slice(o,i);return new t(l,e)}var rn=typeof console<"u"&&console&&console.warn||(()=>{}),sn="until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.",E={scanner:null,parser:null,tokenQueue:[],pluginQueue:[],customSchemes:[],initialized:!1};function Me(){return T.groups={},E.scanner=null,E.parser=null,E.tokenQueue=[],E.pluginQueue=[],E.customSchemes=[],E.initialized=!1,E}function ae(t,n=!1){if(E.initialized&&rn(`linkifyjs: already initialized - will not register custom scheme "${t}" ${sn}`),!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(t))throw new Error(`linkifyjs: incorrect scheme format. 1. Must only contain digits, lowercase ASCII letters or "-" 2. Cannot start or end with "-" -3. "-" cannot repeat`);E.customSchemes.push([t,n])}function ln(){E.scanner=Ze(E.customSchemes);for(let t=0;t{let i=n.some(u=>u.docChanged)&&!e.doc.eq(o.doc),l=n.some(u=>u.getMeta("preventAutolink"));if(!i||l)return;let{tr:a}=o,c=me(e.doc,[...n]);if(xe(c).forEach(({newRange:u})=>{let h=ke(o.doc,u,k=>k.isTextblock),p,m;if(h.length>1)p=h[0],m=o.doc.textBetween(p.pos,p.pos+p.node.nodeSize,void 0," ");else if(h.length){let k=o.doc.textBetween(u.from,u.to," "," ");if(!cn.test(k))return;p=h[0],m=o.doc.textBetween(p.pos,u.to,void 0," ")}if(p&&m){let k=m.split(an).filter(Boolean);if(k.length<=0)return!1;let R=k[k.length-1],b=p.pos+m.lastIndexOf(R);if(!R)return!1;let y=It(R).map(f=>f.toObject(t.defaultProtocol));if(!dn(y))return!1;y.filter(f=>f.isLink).map(f=>({...f,from:b+f.start+1,to:b+f.end+1})).filter(f=>o.schema.marks.code?!o.doc.rangeHasMark(f.from,f.to,o.schema.marks.code):!0).filter(f=>t.validate(f.value)).filter(f=>t.shouldAutoLink(f.value)).forEach(f=>{be(f.from,f.to,o.doc).some(_=>_.mark.type===t.type)||a.addMark(f.from,f.to,t.type.create({href:f.href}))})}}),!!a.steps.length)return a}})}function gn(t){return new wt({key:new vt("handleClickLink"),props:{handleClick:(n,e,o)=>{var i,l;if(o.button!==0||!n.editable)return!1;let a=o.target,c=[];for(;a.nodeName!=="DIV";)c.push(a),a=a.parentNode;if(!c.find(m=>m.nodeName==="A"))return!1;let g=Ee(n.state,t.type.name),u=o.target,h=(i=u?.href)!==null&&i!==void 0?i:g.href,p=(l=u?.target)!==null&&l!==void 0?l:g.target;return u&&h?(window.open(h,p),!0):!1}}})}function hn(t){return new wt({key:new vt("handlePasteLink"),props:{handlePaste:(n,e,o)=>{let{state:i}=n,{selection:l}=i,{empty:a}=l;if(a)return!1;let c="";o.content.forEach(u=>{c+=u.textContent});let g=ce(c,{defaultProtocol:t.defaultProtocol}).find(u=>u.isLink&&u.value===c);return!c||!g?!1:t.editor.commands.setMark(t.type,{href:g.href})}}})}function j(t,n){let e=["http","https","ftp","ftps","mailto","tel","callto","sms","cid","xmpp"];return n&&n.forEach(o=>{let i=typeof o=="string"?o:o.scheme;i&&e.push(i)}),!t||t.replace(un,"").match(new RegExp(`^(?:(?:${e.join("|")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,"i"))}var He=fe.create({name:"link",priority:1e3,keepOnSplit:!1,exitable:!0,onCreate(){this.options.validate&&!this.options.shouldAutoLink&&(this.options.shouldAutoLink=this.options.validate,console.warn("The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.")),this.options.protocols.forEach(t=>{if(typeof t=="string"){ae(t);return}ae(t.scheme,t.optionalSlashes)})},onDestroy(){Me()},inclusive(){return this.options.autolink},addOptions(){return{openOnClick:!0,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:"http",HTMLAttributes:{target:"_blank",rel:"noopener noreferrer nofollow",class:null},isAllowedUri:(t,n)=>!!j(t,n.protocols),validate:t=>!!t,shouldAutoLink:t=>!!t}},addAttributes(){return{href:{default:null,parseHTML(t){return t.getAttribute("href")}},target:{default:this.options.HTMLAttributes.target},rel:{default:this.options.HTMLAttributes.rel},class:{default:this.options.HTMLAttributes.class}}},parseHTML(){return[{tag:"a[href]",getAttrs:t=>{let n=t.getAttribute("href");return!n||!this.options.isAllowedUri(n,{defaultValidate:e=>!!j(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:null}}]},renderHTML({HTMLAttributes:t}){return this.options.isAllowedUri(t.href,{defaultValidate:n=>!!j(n,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?["a",Ut(this.options.HTMLAttributes,t),0]:["a",Ut(this.options.HTMLAttributes,{...t,href:""}),0]},addCommands(){return{setLink:t=>({chain:n})=>{let{href:e}=t;return this.options.isAllowedUri(e,{defaultValidate:o=>!!j(o,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?n().setMark(this.name,t).setMeta("preventAutolink",!0).run():!1},toggleLink:t=>({chain:n})=>{let{href:e}=t;return this.options.isAllowedUri(e,{defaultValidate:o=>!!j(o,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?n().toggleMark(this.name,t,{extendEmptyMarkRange:!0}).setMeta("preventAutolink",!0).run():!1},unsetLink:()=>({chain:t})=>t().unsetMark(this.name,{extendEmptyMarkRange:!0}).setMeta("preventAutolink",!0).run()}},addPasteRules(){return[_e({find:t=>{let n=[];if(t){let{protocols:e,defaultProtocol:o}=this.options,i=ce(t).filter(l=>l.isLink&&this.options.isAllowedUri(l.value,{defaultValidate:a=>!!j(a,e),protocols:e,defaultProtocol:o}));i.length&&i.forEach(l=>n.push({text:l.value,data:{href:l.href},index:l.start}))}return n},type:this.type,getAttributes:t=>{var n;return{href:(n=t.data)===null||n===void 0?void 0:n.href}}})]},addProseMirrorPlugins(){let t=[],{protocols:n,defaultProtocol:e}=this.options;return this.options.autolink&&t.push(pn({type:this.type,defaultProtocol:this.options.defaultProtocol,validate:o=>this.options.isAllowedUri(o,{defaultValidate:i=>!!j(i,n),protocols:n,defaultProtocol:e}),shouldAutoLink:this.options.shouldAutoLink})),this.options.openOnClick===!0&&t.push(gn({type:this.type})),this.options.linkOnPaste&&t.push(hn({editor:this.editor,defaultProtocol:this.options.defaultProtocol,type:this.type})),t}});var je="__LEPTOS_TIPTAP_BRIDGE__";function fn(){let t=globalThis,n=t[je];if(n!=null)return n;let e={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[je]=e,e}function Be(){return fn()}function Ue(t){Be().registerExtension(t)}function Fe(t,n,e,o){let i={href:t};return n!=null&&(i.target=n),e!=null&&(i.rel=e),o!=null&&(i.class=o),i}var mn={name:"link",create:()=>He,commands:{set_link:(t,n)=>n.kind==="set_link"?t.chain().focus().setLink(Fe(n.href,n.target,n.rel,n.class)).run():!1,toggle_link:(t,n)=>n.kind==="toggle_link"?t.chain().focus().toggleLink(Fe(n.href,n.target,n.rel,n.class)).run():!1,unset_link:t=>t.chain().focus().unsetLink().run()},selection_keys:["link"],selection_state:t=>({link:t.isActive("link")})};function fi(){Ue(mn)}export{fi as register_link}; +3. "-" cannot repeat`);E.customSchemes.push([t,n])}function ln(){E.scanner=Ze(E.customSchemes);for(let t=0;t{let i=n.some(u=>u.docChanged)&&!e.doc.eq(o.doc),l=n.some(u=>u.getMeta("preventAutolink"));if(!i||l)return;let{tr:a}=o,c=me(e.doc,[...n]);if(be(c).forEach(({newRange:u})=>{let h=ke(o.doc,u,k=>k.isTextblock),p,m;if(h.length>1)p=h[0],m=o.doc.textBetween(p.pos,p.pos+p.node.nodeSize,void 0," ");else if(h.length){let k=o.doc.textBetween(u.from,u.to," "," ");if(!cn.test(k))return;p=h[0],m=o.doc.textBetween(p.pos,u.to,void 0," ")}if(p&&m){let k=m.split(an).filter(Boolean);if(k.length<=0)return!1;let R=k[k.length-1],x=p.pos+m.lastIndexOf(R);if(!R)return!1;let y=wt(R).map(f=>f.toObject(t.defaultProtocol));if(!dn(y))return!1;y.filter(f=>f.isLink).map(f=>({...f,from:x+f.start+1,to:x+f.end+1})).filter(f=>o.schema.marks.code?!o.doc.rangeHasMark(f.from,f.to,o.schema.marks.code):!0).filter(f=>t.validate(f.value)).filter(f=>t.shouldAutoLink(f.value)).forEach(f=>{xe(f.from,f.to,o.doc).some(_=>_.mark.type===t.type)||a.addMark(f.from,f.to,t.type.create({href:f.href}))})}}),!!a.steps.length)return a}})}function gn(t){return new It({key:new vt("handleClickLink"),props:{handleClick:(n,e,o)=>{var i,l;if(o.button!==0||!n.editable)return!1;let a=o.target,c=[];for(;a.nodeName!=="DIV";)c.push(a),a=a.parentNode;if(!c.find(m=>m.nodeName==="A"))return!1;let g=Ee(n.state,t.type.name),u=o.target,h=(i=u?.href)!==null&&i!==void 0?i:g.href,p=(l=u?.target)!==null&&l!==void 0?l:g.target;return u&&h?(window.open(h,p),!0):!1}}})}function hn(t){return new It({key:new vt("handlePasteLink"),props:{handlePaste:(n,e,o)=>{let{state:i}=n,{selection:l}=i,{empty:a}=l;if(a)return!1;let c="";o.content.forEach(u=>{c+=u.textContent});let g=ce(c,{defaultProtocol:t.defaultProtocol}).find(u=>u.isLink&&u.value===c);return!c||!g?!1:t.editor.commands.setMark(t.type,{href:g.href})}}})}function j(t,n){let e=["http","https","ftp","ftps","mailto","tel","callto","sms","cid","xmpp"];return n&&n.forEach(o=>{let i=typeof o=="string"?o:o.scheme;i&&e.push(i)}),!t||t.replace(un,"").match(new RegExp(`^(?:(?:${e.join("|")}):|[^a-z]|[a-z0-9+.-]+(?:[^a-z+.-:]|$))`,"i"))}var He=fe.create({name:"link",priority:1e3,keepOnSplit:!1,exitable:!0,onCreate(){this.options.validate&&!this.options.shouldAutoLink&&(this.options.shouldAutoLink=this.options.validate,console.warn("The `validate` option is deprecated. Rename to the `shouldAutoLink` option instead.")),this.options.protocols.forEach(t=>{if(typeof t=="string"){ae(t);return}ae(t.scheme,t.optionalSlashes)})},onDestroy(){Me()},inclusive(){return this.options.autolink},addOptions(){return{openOnClick:!0,linkOnPaste:!0,autolink:!0,protocols:[],defaultProtocol:"http",HTMLAttributes:{target:"_blank",rel:"noopener noreferrer nofollow",class:null},isAllowedUri:(t,n)=>!!j(t,n.protocols),validate:t=>!!t,shouldAutoLink:t=>!!t}},addAttributes(){return{href:{default:null,parseHTML(t){return t.getAttribute("href")}},target:{default:this.options.HTMLAttributes.target},rel:{default:this.options.HTMLAttributes.rel},class:{default:this.options.HTMLAttributes.class}}},parseHTML(){return[{tag:"a[href]",getAttrs:t=>{let n=t.getAttribute("href");return!n||!this.options.isAllowedUri(n,{defaultValidate:e=>!!j(e,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?!1:null}}]},renderHTML({HTMLAttributes:t}){return this.options.isAllowedUri(t.href,{defaultValidate:n=>!!j(n,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?["a",Ut(this.options.HTMLAttributes,t),0]:["a",Ut(this.options.HTMLAttributes,{...t,href:""}),0]},addCommands(){return{setLink:t=>({chain:n})=>{let{href:e}=t;return this.options.isAllowedUri(e,{defaultValidate:o=>!!j(o,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?n().setMark(this.name,t).setMeta("preventAutolink",!0).run():!1},toggleLink:t=>({chain:n})=>{let{href:e}=t;return this.options.isAllowedUri(e,{defaultValidate:o=>!!j(o,this.options.protocols),protocols:this.options.protocols,defaultProtocol:this.options.defaultProtocol})?n().toggleMark(this.name,t,{extendEmptyMarkRange:!0}).setMeta("preventAutolink",!0).run():!1},unsetLink:()=>({chain:t})=>t().unsetMark(this.name,{extendEmptyMarkRange:!0}).setMeta("preventAutolink",!0).run()}},addPasteRules(){return[_e({find:t=>{let n=[];if(t){let{protocols:e,defaultProtocol:o}=this.options,i=ce(t).filter(l=>l.isLink&&this.options.isAllowedUri(l.value,{defaultValidate:a=>!!j(a,e),protocols:e,defaultProtocol:o}));i.length&&i.forEach(l=>n.push({text:l.value,data:{href:l.href},index:l.start}))}return n},type:this.type,getAttributes:t=>{var n;return{href:(n=t.data)===null||n===void 0?void 0:n.href}}})]},addProseMirrorPlugins(){let t=[],{protocols:n,defaultProtocol:e}=this.options;return this.options.autolink&&t.push(pn({type:this.type,defaultProtocol:this.options.defaultProtocol,validate:o=>this.options.isAllowedUri(o,{defaultValidate:i=>!!j(i,n),protocols:n,defaultProtocol:e}),shouldAutoLink:this.options.shouldAutoLink})),this.options.openOnClick===!0&&t.push(gn({type:this.type})),this.options.linkOnPaste&&t.push(hn({editor:this.editor,defaultProtocol:this.options.defaultProtocol,type:this.type})),t}});var je="__LEPTOS_TIPTAP_BRIDGE__";function fn(){let t=globalThis,n=t[je];if(n!=null)return n;let e={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[je]=e,e}function Be(){return fn()}function Ue(t){Be().registerExtension(t)}function Fe(t,n,e,o){let i={href:t};return n!=null&&(i.target=n),e!=null&&(i.rel=e),o!=null&&(i.class=o),i}var mn={name:"link",create:()=>He,commands:{set_link:(t,n)=>n.kind==="set_link"?t.chain().focus().setLink(Fe(n.href,n.target,n.rel,n.class)).run():!1,toggle_link:(t,n)=>n.kind==="toggle_link"?t.chain().focus().toggleLink(Fe(n.href,n.target,n.rel,n.class)).run():!1,unset_link:t=>t.chain().focus().unsetLink().run()},selection_keys:["link"],selection_state:t=>({link:t.isActive("link")})};function fi(){Ue(mn)}export{fi as register_link}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_list_item.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_list_item.js index c0137d7c..c708cb0d 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_list_item.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_list_item.js @@ -1 +1 @@ -var o=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(o==null||o.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=o.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=t.CommandManager,_=t.Editor,m=t.Extension,x=t.InputRule,k=t.Mark,r=t.Node,b=t.NodePos,y=t.NodeView,h=t.PasteRule,E=t.Tracker,f=t.callOrReturn,R=t.canInsertNode,P=t.combineTransactionSteps,T=t.createChainableState,A=t.createDocument,C=t.createNodeFromContent,S=t.createStyleTag,N=t.defaultBlockAt,O=t.deleteProps,I=t.elementFromString,B=t.escapeForRegEx,w=t.extensions,v=t.findChildren,M=t.findChildrenInRange,L=t.findDuplicates,F=t.findParentNode,D=t.findParentNodeClosestToPos,j=t.fromString,K=t.generateHTML,H=t.generateJSON,q=t.generateText,G=t.getAttributes,z=t.getAttributesFromExtensions,J=t.getChangedRanges,U=t.getDebugJSON,V=t.getExtensionField,Y=t.getHTMLFromFragment,Q=t.getMarkAttributes,W=t.getMarkRange,X=t.getMarkType,Z=t.getMarksBetween,$=t.getNodeAtPosition,tt=t.getNodeAttributes,et=t.getNodeType,nt=t.getRenderedAttributes,ot=t.getSchema,it=t.getSchemaByResolvedExtensions,rt=t.getSchemaTypeByName,st=t.getSchemaTypeNameByName,lt=t.getSplittedAttributes,at=t.getText,dt=t.getTextBetween,pt=t.getTextContentFromNodes,ct=t.getTextSerializersFromSchema,ut=t.injectExtensionAttributesToParseRule,gt=t.inputRulesPlugin,_t=t.isActive,mt=t.isAtEndOfNode,xt=t.isAtStartOfNode,kt=t.isEmptyObject,bt=t.isExtensionRulesEnabled,yt=t.isFunction,ht=t.isList,Et=t.isMacOS,ft=t.isMarkActive,Rt=t.isNodeActive,Pt=t.isNodeEmpty,Tt=t.isNodeSelection,At=t.isNumber,Ct=t.isPlainObject,St=t.isRegExp,Nt=t.isSafari,Ot=t.isString,It=t.isTextSelection,Bt=t.isiOS,wt=t.markInputRule,vt=t.markPasteRule,s=t.mergeAttributes,Mt=t.mergeDeep,Lt=t.minMax,Ft=t.nodeInputRule,Dt=t.nodePasteRule,jt=t.objectIncludes,Kt=t.pasteRulesPlugin,Ht=t.posToDOMRect,qt=t.removeDuplicates,Gt=t.resolveFocusPosition,zt=t.rewriteUnknownContent,Jt=t.selectionToInsertionEnd,Ut=t.splitExtensions,Vt=t.textInputRule,Yt=t.textPasteRule,Qt=t.textblockTypeInputRule,Wt=t.wrappingInputRule;var l=r.create({name:"listItem",addOptions(){return{HTMLAttributes:{},bulletListTypeName:"bulletList",orderedListTypeName:"orderedList"}},content:"paragraph block*",defining:!0,parseHTML(){return[{tag:"li"}]},renderHTML({HTMLAttributes:e}){return["li",s(this.options.HTMLAttributes,e),0]},addKeyboardShortcuts(){return{Enter:()=>this.editor.commands.splitListItem(this.name),Tab:()=>this.editor.commands.sinkListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)}}});var a="__LEPTOS_TIPTAP_BRIDGE__";function c(){let e=globalThis,n=e[a];if(n!=null)return n;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[a]=i,i}function d(){return c()}function p(e){d().registerExtension(e)}var u={name:"list_item",create:()=>l,commands:{split_list_item:(e,n)=>n.kind==="split_list_item"?e.chain().focus().splitListItem(e.isActive("taskList")?"taskItem":"listItem",n.attributes??{}).run():!1,sink_list_item:e=>e.chain().focus().sinkListItem(e.isActive("taskList")?"taskItem":"listItem").run(),lift_list_item:e=>e.chain().focus().liftListItem(e.isActive("taskList")?"taskItem":"listItem").run()}};function re(){p(u)}export{re as register_list_item}; +var o=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(o==null||o.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=o.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=t.CommandManager,_=t.Editor,m=t.Extension,x=t.InputRule,k=t.Mark,r=t.Node,b=t.NodePos,y=t.NodeView,h=t.PasteRule,f=t.Tracker,E=t.callOrReturn,R=t.canInsertNode,P=t.combineTransactionSteps,T=t.createChainableState,A=t.createDocument,C=t.createNodeFromContent,S=t.createStyleTag,w=t.defaultBlockAt,N=t.deleteProps,O=t.elementFromString,I=t.escapeForRegEx,B=t.extensions,v=t.findChildren,M=t.findChildrenInRange,L=t.findDuplicates,F=t.findParentNode,D=t.findParentNodeClosestToPos,j=t.fromString,K=t.generateHTML,H=t.generateJSON,q=t.generateText,G=t.getAttributes,z=t.getAttributesFromExtensions,J=t.getChangedRanges,U=t.getDebugJSON,V=t.getExtensionField,Y=t.getHTMLFromFragment,Q=t.getMarkAttributes,W=t.getMarkRange,X=t.getMarkType,Z=t.getMarksBetween,$=t.getNodeAtPosition,tt=t.getNodeAttributes,et=t.getNodeType,nt=t.getRenderedAttributes,ot=t.getSchema,it=t.getSchemaByResolvedExtensions,rt=t.getSchemaTypeByName,st=t.getSchemaTypeNameByName,lt=t.getSplittedAttributes,at=t.getText,dt=t.getTextBetween,pt=t.getTextContentFromNodes,ct=t.getTextSerializersFromSchema,ut=t.injectExtensionAttributesToParseRule,gt=t.inputRulesPlugin,_t=t.isActive,mt=t.isAtEndOfNode,xt=t.isAtStartOfNode,kt=t.isEmptyObject,bt=t.isExtensionRulesEnabled,yt=t.isFunction,ht=t.isList,ft=t.isMacOS,Et=t.isMarkActive,Rt=t.isNodeActive,Pt=t.isNodeEmpty,Tt=t.isNodeSelection,At=t.isNumber,Ct=t.isPlainObject,St=t.isRegExp,wt=t.isSafari,Nt=t.isString,Ot=t.isTextSelection,It=t.isiOS,Bt=t.markInputRule,vt=t.markPasteRule,s=t.mergeAttributes,Mt=t.mergeDeep,Lt=t.minMax,Ft=t.nodeInputRule,Dt=t.nodePasteRule,jt=t.objectIncludes,Kt=t.pasteRulesPlugin,Ht=t.posToDOMRect,qt=t.removeDuplicates,Gt=t.resolveFocusPosition,zt=t.rewriteUnknownContent,Jt=t.selectionToInsertionEnd,Ut=t.splitExtensions,Vt=t.textInputRule,Yt=t.textPasteRule,Qt=t.textblockTypeInputRule,Wt=t.wrappingInputRule;var l=r.create({name:"listItem",addOptions(){return{HTMLAttributes:{},bulletListTypeName:"bulletList",orderedListTypeName:"orderedList"}},content:"paragraph block*",defining:!0,parseHTML(){return[{tag:"li"}]},renderHTML({HTMLAttributes:e}){return["li",s(this.options.HTMLAttributes,e),0]},addKeyboardShortcuts(){return{Enter:()=>this.editor.commands.splitListItem(this.name),Tab:()=>this.editor.commands.sinkListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)}}});var a="__LEPTOS_TIPTAP_BRIDGE__";function c(){let e=globalThis,n=e[a];if(n!=null)return n;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[a]=i,i}function d(){return c()}function p(e){d().registerExtension(e)}var u={name:"list_item",create:()=>l,commands:{split_list_item:(e,n)=>n.kind==="split_list_item"?e.chain().focus().splitListItem(e.isActive("taskList")?"taskItem":"listItem",n.attributes??{}).run():!1,sink_list_item:e=>e.chain().focus().sinkListItem(e.isActive("taskList")?"taskItem":"listItem").run(),lift_list_item:e=>e.chain().focus().liftListItem(e.isActive("taskList")?"taskItem":"listItem").run()}};function re(){p(u)}export{re as register_list_item}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_ordered_list.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_ordered_list.js index 7eeda273..dc489ab0 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_ordered_list.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_ordered_list.js @@ -1 +1 @@ -var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=i.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,y=t.Extension,h=t.InputRule,f=t.Mark,a=t.Node,E=t.NodePos,R=t.NodeView,A=t.PasteRule,T=t.Tracker,P=t.callOrReturn,C=t.canInsertNode,S=t.combineTransactionSteps,N=t.createChainableState,O=t.createDocument,B=t.createNodeFromContent,M=t.createStyleTag,w=t.defaultBlockAt,I=t.deleteProps,v=t.elementFromString,F=t.escapeForRegEx,L=t.extensions,D=t.findChildren,j=t.findChildrenInRange,H=t.findDuplicates,K=t.findParentNode,q=t.findParentNodeClosestToPos,G=t.fromString,z=t.generateHTML,J=t.generateJSON,U=t.generateText,V=t.getAttributes,Y=t.getAttributesFromExtensions,$=t.getChangedRanges,W=t.getDebugJSON,Q=t.getExtensionField,X=t.getHTMLFromFragment,Z=t.getMarkAttributes,tt=t.getMarkRange,et=t.getMarkType,nt=t.getMarksBetween,ot=t.getNodeAtPosition,it=t.getNodeAttributes,rt=t.getNodeType,st=t.getRenderedAttributes,at=t.getSchema,lt=t.getSchemaByResolvedExtensions,dt=t.getSchemaTypeByName,pt=t.getSchemaTypeNameByName,ut=t.getSplittedAttributes,ct=t.getText,gt=t.getTextBetween,_t=t.getTextContentFromNodes,xt=t.getTextSerializersFromSchema,mt=t.injectExtensionAttributesToParseRule,kt=t.inputRulesPlugin,bt=t.isActive,yt=t.isAtEndOfNode,ht=t.isAtStartOfNode,ft=t.isEmptyObject,Et=t.isExtensionRulesEnabled,Rt=t.isFunction,At=t.isList,Tt=t.isMacOS,Pt=t.isMarkActive,Ct=t.isNodeActive,St=t.isNodeEmpty,Nt=t.isNodeSelection,Ot=t.isNumber,Bt=t.isPlainObject,Mt=t.isRegExp,wt=t.isSafari,It=t.isString,vt=t.isTextSelection,Ft=t.isiOS,Lt=t.markInputRule,Dt=t.markPasteRule,r=t.mergeAttributes,jt=t.mergeDeep,Ht=t.minMax,Kt=t.nodeInputRule,qt=t.nodePasteRule,Gt=t.objectIncludes,zt=t.pasteRulesPlugin,Jt=t.posToDOMRect,Ut=t.removeDuplicates,Vt=t.resolveFocusPosition,Yt=t.rewriteUnknownContent,$t=t.selectionToInsertionEnd,Wt=t.splitExtensions,Qt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,s=t.wrappingInputRule;var _="listItem",l="textStyle",d=/^(\d+)\.\s$/,p=a.create({name:"orderedList",addOptions(){return{itemTypeName:"listItem",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:"block list",content(){return`${this.options.itemTypeName}+`},addAttributes(){return{start:{default:1,parseHTML:e=>e.hasAttribute("start")?parseInt(e.getAttribute("start")||"",10):1},type:{default:null,parseHTML:e=>e.getAttribute("type")}}},parseHTML(){return[{tag:"ol"}]},renderHTML({HTMLAttributes:e}){let{start:n,...o}=e;return n===1?["ol",r(this.options.HTMLAttributes,o),0]:["ol",r(this.options.HTMLAttributes,e),0]},addCommands(){return{toggleOrderedList:()=>({commands:e,chain:n})=>this.options.keepAttributes?n().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(_,this.editor.getAttributes(l)).run():e.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-7":()=>this.editor.commands.toggleOrderedList()}},addInputRules(){let e=s({find:d,type:this.type,getAttributes:n=>({start:+n[1]}),joinPredicate:(n,o)=>o.childCount+o.attrs.start===+n[1]});return(this.options.keepMarks||this.options.keepAttributes)&&(e=s({find:d,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:n=>({start:+n[1],...this.editor.getAttributes(l)}),joinPredicate:(n,o)=>o.childCount+o.attrs.start===+n[1],editor:this.editor})),[e]}});var u="__LEPTOS_TIPTAP_BRIDGE__";function x(){let e=globalThis,n=e[u];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[u]=o,o}function c(){return x()}function g(e){c().registerExtension(e)}var m={name:"ordered_list",create:()=>p,commands:{toggle_ordered_list:e=>e.chain().focus().toggleOrderedList().run()},selection_keys:["ordered_list"],selection_state:e=>({ordered_list:e.isActive("orderedList")})};function le(){g(m)}export{le as register_ordered_list}; +var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=i.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,y=t.Extension,h=t.InputRule,f=t.Mark,l=t.Node,E=t.NodePos,R=t.NodeView,A=t.PasteRule,T=t.Tracker,P=t.callOrReturn,C=t.canInsertNode,S=t.combineTransactionSteps,N=t.createChainableState,O=t.createDocument,w=t.createNodeFromContent,B=t.createStyleTag,M=t.defaultBlockAt,I=t.deleteProps,v=t.elementFromString,F=t.escapeForRegEx,L=t.extensions,D=t.findChildren,j=t.findChildrenInRange,H=t.findDuplicates,K=t.findParentNode,q=t.findParentNodeClosestToPos,G=t.fromString,z=t.generateHTML,J=t.generateJSON,U=t.generateText,V=t.getAttributes,Y=t.getAttributesFromExtensions,$=t.getChangedRanges,W=t.getDebugJSON,Q=t.getExtensionField,X=t.getHTMLFromFragment,Z=t.getMarkAttributes,tt=t.getMarkRange,et=t.getMarkType,nt=t.getMarksBetween,ot=t.getNodeAtPosition,it=t.getNodeAttributes,rt=t.getNodeType,st=t.getRenderedAttributes,lt=t.getSchema,at=t.getSchemaByResolvedExtensions,dt=t.getSchemaTypeByName,pt=t.getSchemaTypeNameByName,ut=t.getSplittedAttributes,ct=t.getText,gt=t.getTextBetween,_t=t.getTextContentFromNodes,mt=t.getTextSerializersFromSchema,xt=t.injectExtensionAttributesToParseRule,kt=t.inputRulesPlugin,bt=t.isActive,yt=t.isAtEndOfNode,ht=t.isAtStartOfNode,ft=t.isEmptyObject,Et=t.isExtensionRulesEnabled,Rt=t.isFunction,At=t.isList,Tt=t.isMacOS,Pt=t.isMarkActive,Ct=t.isNodeActive,St=t.isNodeEmpty,Nt=t.isNodeSelection,Ot=t.isNumber,wt=t.isPlainObject,Bt=t.isRegExp,Mt=t.isSafari,It=t.isString,vt=t.isTextSelection,Ft=t.isiOS,Lt=t.markInputRule,Dt=t.markPasteRule,r=t.mergeAttributes,jt=t.mergeDeep,Ht=t.minMax,Kt=t.nodeInputRule,qt=t.nodePasteRule,Gt=t.objectIncludes,zt=t.pasteRulesPlugin,Jt=t.posToDOMRect,Ut=t.removeDuplicates,Vt=t.resolveFocusPosition,Yt=t.rewriteUnknownContent,$t=t.selectionToInsertionEnd,Wt=t.splitExtensions,Qt=t.textInputRule,Xt=t.textPasteRule,Zt=t.textblockTypeInputRule,s=t.wrappingInputRule;var _="listItem",a="textStyle",d=/^(\d+)\.\s$/,p=l.create({name:"orderedList",addOptions(){return{itemTypeName:"listItem",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:"block list",content(){return`${this.options.itemTypeName}+`},addAttributes(){return{start:{default:1,parseHTML:e=>e.hasAttribute("start")?parseInt(e.getAttribute("start")||"",10):1},type:{default:null,parseHTML:e=>e.getAttribute("type")}}},parseHTML(){return[{tag:"ol"}]},renderHTML({HTMLAttributes:e}){let{start:n,...o}=e;return n===1?["ol",r(this.options.HTMLAttributes,o),0]:["ol",r(this.options.HTMLAttributes,e),0]},addCommands(){return{toggleOrderedList:()=>({commands:e,chain:n})=>this.options.keepAttributes?n().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(_,this.editor.getAttributes(a)).run():e.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-7":()=>this.editor.commands.toggleOrderedList()}},addInputRules(){let e=s({find:d,type:this.type,getAttributes:n=>({start:+n[1]}),joinPredicate:(n,o)=>o.childCount+o.attrs.start===+n[1]});return(this.options.keepMarks||this.options.keepAttributes)&&(e=s({find:d,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:n=>({start:+n[1],...this.editor.getAttributes(a)}),joinPredicate:(n,o)=>o.childCount+o.attrs.start===+n[1],editor:this.editor})),[e]}});var u="__LEPTOS_TIPTAP_BRIDGE__";function m(){let e=globalThis,n=e[u];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[u]=o,o}function c(){return m()}function g(e){c().registerExtension(e)}var x={name:"ordered_list",create:()=>p,commands:{toggle_ordered_list:e=>e.chain().focus().toggleOrderedList().run()},selection_keys:["ordered_list"],selection_state:e=>({ordered_list:e.isActive("orderedList")})};function ae(){g(x)}export{ae as register_ordered_list}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_paragraph.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_paragraph.js index 797f27d1..61dd71de 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_paragraph.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_paragraph.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=t.CommandManager,_=t.Editor,x=t.Extension,m=t.InputRule,k=t.Mark,i=t.Node,b=t.NodePos,y=t.NodeView,h=t.PasteRule,E=t.Tracker,P=t.callOrReturn,R=t.canInsertNode,f=t.combineTransactionSteps,C=t.createChainableState,T=t.createDocument,A=t.createNodeFromContent,S=t.createStyleTag,N=t.defaultBlockAt,O=t.deleteProps,B=t.elementFromString,w=t.escapeForRegEx,v=t.extensions,M=t.findChildren,I=t.findChildrenInRange,F=t.findDuplicates,D=t.findParentNode,j=t.findParentNodeClosestToPos,L=t.fromString,K=t.generateHTML,H=t.generateJSON,q=t.generateText,G=t.getAttributes,z=t.getAttributesFromExtensions,J=t.getChangedRanges,U=t.getDebugJSON,V=t.getExtensionField,Y=t.getHTMLFromFragment,Q=t.getMarkAttributes,W=t.getMarkRange,X=t.getMarkType,Z=t.getMarksBetween,$=t.getNodeAtPosition,tt=t.getNodeAttributes,et=t.getNodeType,nt=t.getRenderedAttributes,ot=t.getSchema,rt=t.getSchemaByResolvedExtensions,it=t.getSchemaTypeByName,st=t.getSchemaTypeNameByName,at=t.getSplittedAttributes,lt=t.getText,pt=t.getTextBetween,dt=t.getTextContentFromNodes,ct=t.getTextSerializersFromSchema,ut=t.injectExtensionAttributesToParseRule,gt=t.inputRulesPlugin,_t=t.isActive,xt=t.isAtEndOfNode,mt=t.isAtStartOfNode,kt=t.isEmptyObject,bt=t.isExtensionRulesEnabled,yt=t.isFunction,ht=t.isList,Et=t.isMacOS,Pt=t.isMarkActive,Rt=t.isNodeActive,ft=t.isNodeEmpty,Ct=t.isNodeSelection,Tt=t.isNumber,At=t.isPlainObject,St=t.isRegExp,Nt=t.isSafari,Ot=t.isString,Bt=t.isTextSelection,wt=t.isiOS,vt=t.markInputRule,Mt=t.markPasteRule,s=t.mergeAttributes,It=t.mergeDeep,Ft=t.minMax,Dt=t.nodeInputRule,jt=t.nodePasteRule,Lt=t.objectIncludes,Kt=t.pasteRulesPlugin,Ht=t.posToDOMRect,qt=t.removeDuplicates,Gt=t.resolveFocusPosition,zt=t.rewriteUnknownContent,Jt=t.selectionToInsertionEnd,Ut=t.splitExtensions,Vt=t.textInputRule,Yt=t.textPasteRule,Qt=t.textblockTypeInputRule,Wt=t.wrappingInputRule;var a=i.create({name:"paragraph",priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:"block",content:"inline*",parseHTML(){return[{tag:"p"}]},renderHTML({HTMLAttributes:e}){return["p",s(this.options.HTMLAttributes,e),0]},addCommands(){return{setParagraph:()=>({commands:e})=>e.setNode(this.name)}},addKeyboardShortcuts(){return{"Mod-Alt-0":()=>this.editor.commands.setParagraph()}}});var l="__LEPTOS_TIPTAP_BRIDGE__";function c(){let e=globalThis,o=e[l];if(o!=null)return o;let r={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[l]=r,r}function p(){return c()}function d(e){p().registerExtension(e)}var u={name:"paragraph",create:()=>a,commands:{set_paragraph:e=>e.chain().focus().setParagraph().run()},selection_keys:["paragraph"],selection_state:e=>({paragraph:e.isActive("paragraph")})};function ie(){d(u)}export{ie as register_paragraph}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=e.CommandManager,_=e.Editor,x=e.Extension,m=e.InputRule,k=e.Mark,i=e.Node,b=e.NodePos,y=e.NodeView,h=e.PasteRule,E=e.Tracker,f=e.callOrReturn,P=e.canInsertNode,R=e.combineTransactionSteps,C=e.createChainableState,T=e.createDocument,A=e.createNodeFromContent,S=e.createStyleTag,w=e.defaultBlockAt,N=e.deleteProps,O=e.elementFromString,B=e.escapeForRegEx,v=e.extensions,M=e.findChildren,I=e.findChildrenInRange,F=e.findDuplicates,D=e.findParentNode,j=e.findParentNodeClosestToPos,L=e.fromString,K=e.generateHTML,H=e.generateJSON,q=e.generateText,G=e.getAttributes,z=e.getAttributesFromExtensions,J=e.getChangedRanges,U=e.getDebugJSON,V=e.getExtensionField,Y=e.getHTMLFromFragment,Q=e.getMarkAttributes,W=e.getMarkRange,X=e.getMarkType,Z=e.getMarksBetween,$=e.getNodeAtPosition,ee=e.getNodeAttributes,te=e.getNodeType,ne=e.getRenderedAttributes,oe=e.getSchema,re=e.getSchemaByResolvedExtensions,ie=e.getSchemaTypeByName,se=e.getSchemaTypeNameByName,ae=e.getSplittedAttributes,le=e.getText,de=e.getTextBetween,pe=e.getTextContentFromNodes,ce=e.getTextSerializersFromSchema,ue=e.injectExtensionAttributesToParseRule,ge=e.inputRulesPlugin,_e=e.isActive,xe=e.isAtEndOfNode,me=e.isAtStartOfNode,ke=e.isEmptyObject,be=e.isExtensionRulesEnabled,ye=e.isFunction,he=e.isList,Ee=e.isMacOS,fe=e.isMarkActive,Pe=e.isNodeActive,Re=e.isNodeEmpty,Ce=e.isNodeSelection,Te=e.isNumber,Ae=e.isPlainObject,Se=e.isRegExp,we=e.isSafari,Ne=e.isString,Oe=e.isTextSelection,Be=e.isiOS,ve=e.markInputRule,Me=e.markPasteRule,s=e.mergeAttributes,Ie=e.mergeDeep,Fe=e.minMax,De=e.nodeInputRule,je=e.nodePasteRule,Le=e.objectIncludes,Ke=e.pasteRulesPlugin,He=e.posToDOMRect,qe=e.removeDuplicates,Ge=e.resolveFocusPosition,ze=e.rewriteUnknownContent,Je=e.selectionToInsertionEnd,Ue=e.splitExtensions,Ve=e.textInputRule,Ye=e.textPasteRule,Qe=e.textblockTypeInputRule,We=e.wrappingInputRule;var a=i.create({name:"paragraph",priority:1e3,addOptions(){return{HTMLAttributes:{}}},group:"block",content:"inline*",parseHTML(){return[{tag:"p"}]},renderHTML({HTMLAttributes:t}){return["p",s(this.options.HTMLAttributes,t),0]},addCommands(){return{setParagraph:()=>({commands:t})=>t.setNode(this.name)}},addKeyboardShortcuts(){return{"Mod-Alt-0":()=>this.editor.commands.setParagraph()}}});var l="__LEPTOS_TIPTAP_BRIDGE__";function c(){let t=globalThis,o=t[l];if(o!=null)return o;let r={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[l]=r,r}function d(){return c()}function p(t){d().registerExtension(t)}var u={name:"paragraph",create:()=>a,commands:{set_paragraph:t=>t.chain().focus().setParagraph().run()},selection_keys:["paragraph"],selection_state:t=>({paragraph:t.isActive("paragraph")})};function it(){p(u)}export{it as register_paragraph}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_placeholder.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_placeholder.js index 39836f9e..86bc5455 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_placeholder.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_placeholder.js @@ -1 +1 @@ -var a=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(a==null||a.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=a.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var O=t.CommandManager,N=t.Editor,m=t.Extension,B=t.InputRule,v=t.Mark,D=t.Node,I=t.NodePos,F=t.NodeView,M=t.PasteRule,j=t.Tracker,L=t.callOrReturn,K=t.canInsertNode,G=t.combineTransactionSteps,q=t.createChainableState,H=t.createDocument,z=t.createNodeFromContent,J=t.createStyleTag,V=t.defaultBlockAt,W=t.deleteProps,U=t.elementFromString,Y=t.escapeForRegEx,Q=t.extensions,X=t.findChildren,Z=t.findChildrenInRange,$=t.findDuplicates,tt=t.findParentNode,et=t.findParentNodeClosestToPos,nt=t.fromString,ot=t.generateHTML,it=t.generateJSON,rt=t.generateText,st=t.getAttributes,lt=t.getAttributesFromExtensions,at=t.getChangedRanges,pt=t.getDebugJSON,dt=t.getExtensionField,ct=t.getHTMLFromFragment,ut=t.getMarkAttributes,gt=t.getMarkRange,_t=t.getMarkType,xt=t.getMarksBetween,mt=t.getNodeAtPosition,kt=t.getNodeAttributes,bt=t.getNodeType,yt=t.getRenderedAttributes,ht=t.getSchema,Et=t.getSchemaByResolvedExtensions,Pt=t.getSchemaTypeByName,ft=t.getSchemaTypeNameByName,St=t.getSplittedAttributes,Rt=t.getText,Ct=t.getTextBetween,Tt=t.getTextContentFromNodes,At=t.getTextSerializersFromSchema,wt=t.injectExtensionAttributesToParseRule,Ot=t.inputRulesPlugin,Nt=t.isActive,Bt=t.isAtEndOfNode,vt=t.isAtStartOfNode,Dt=t.isEmptyObject,It=t.isExtensionRulesEnabled,Ft=t.isFunction,Mt=t.isList,jt=t.isMacOS,Lt=t.isMarkActive,Kt=t.isNodeActive,k=t.isNodeEmpty,Gt=t.isNodeSelection,qt=t.isNumber,Ht=t.isPlainObject,zt=t.isRegExp,Jt=t.isSafari,Vt=t.isString,Wt=t.isTextSelection,Ut=t.isiOS,Yt=t.markInputRule,Qt=t.markPasteRule,Xt=t.mergeAttributes,Zt=t.mergeDeep,$t=t.minMax,te=t.nodeInputRule,ee=t.nodePasteRule,ne=t.objectIncludes,oe=t.pasteRulesPlugin,ie=t.posToDOMRect,re=t.removeDuplicates,se=t.resolveFocusPosition,le=t.rewriteUnknownContent,ae=t.selectionToInsertionEnd,pe=t.splitExtensions,de=t.textInputRule,ce=t.textPasteRule,ue=t.textblockTypeInputRule,ge=t.wrappingInputRule;var p=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(p==null||p.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var n=p.modules["@tiptap/pm/state"];if(n==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/state" is unavailable');var xe=n.AllSelection,me=n.EditorState,ke=n.NodeSelection,b=n.Plugin,y=n.PluginKey,be=n.Selection,ye=n.SelectionRange,he=n.TextSelection,Ee=n.Transaction;var d=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(d==null||d.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var o=d.modules["@tiptap/pm/view"];if(o==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/view" is unavailable');var h=o.Decoration,E=o.DecorationSet,fe=o.EditorView,Se=o.__endComposition,Re=o.__parseFromClipboard;var c=m.create({name:"placeholder",addOptions(){return{emptyEditorClass:"is-editor-empty",emptyNodeClass:"is-empty",placeholder:"Write something \u2026",showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){return[new b({key:new y("placeholder"),props:{decorations:({doc:e,selection:s})=>{let l=this.editor.isEditable||!this.options.showOnlyWhenEditable,{anchor:u}=s,g=[];if(!l)return null;let R=this.editor.isEmpty;return e.descendants((i,r)=>{let _=u>=r&&u<=r+i.nodeSize,C=!i.isLeaf&&k(i);if((_||!this.options.showOnlyCurrent)&&C){let x=[this.options.emptyNodeClass];R&&x.push(this.options.emptyEditorClass);let T=h.node(r,r+i.nodeSize,{class:x.join(" "),"data-placeholder":typeof this.options.placeholder=="function"?this.options.placeholder({editor:this.editor,node:i,pos:r,hasAnchor:_}):this.options.placeholder});g.push(T)}return this.options.includeChildren}),E.create(e,g)}}})]}});var P="__LEPTOS_TIPTAP_BRIDGE__";function A(){let e=globalThis,s=e[P];if(s!=null)return s;let l={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[P]=l,l}function f(){return A()}function S(e){f().registerExtension(e)}var w={name:"placeholder",create:({placeholder:e})=>e==null?c:c.configure({placeholder:e})};function Fe(){S(w)}export{Fe as register_placeholder}; +var a=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(a==null||a.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=a.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var O=e.CommandManager,N=e.Editor,m=e.Extension,B=e.InputRule,v=e.Mark,D=e.Node,I=e.NodePos,F=e.NodeView,M=e.PasteRule,j=e.Tracker,L=e.callOrReturn,K=e.canInsertNode,G=e.combineTransactionSteps,q=e.createChainableState,H=e.createDocument,z=e.createNodeFromContent,J=e.createStyleTag,V=e.defaultBlockAt,W=e.deleteProps,U=e.elementFromString,Y=e.escapeForRegEx,Q=e.extensions,X=e.findChildren,Z=e.findChildrenInRange,$=e.findDuplicates,ee=e.findParentNode,te=e.findParentNodeClosestToPos,ne=e.fromString,oe=e.generateHTML,ie=e.generateJSON,re=e.generateText,se=e.getAttributes,le=e.getAttributesFromExtensions,ae=e.getChangedRanges,de=e.getDebugJSON,pe=e.getExtensionField,ce=e.getHTMLFromFragment,ue=e.getMarkAttributes,ge=e.getMarkRange,_e=e.getMarkType,xe=e.getMarksBetween,me=e.getNodeAtPosition,be=e.getNodeAttributes,ke=e.getNodeType,ye=e.getRenderedAttributes,he=e.getSchema,Ee=e.getSchemaByResolvedExtensions,fe=e.getSchemaTypeByName,Pe=e.getSchemaTypeNameByName,Se=e.getSplittedAttributes,Re=e.getText,Ce=e.getTextBetween,Te=e.getTextContentFromNodes,we=e.getTextSerializersFromSchema,Ae=e.injectExtensionAttributesToParseRule,Oe=e.inputRulesPlugin,Ne=e.isActive,Be=e.isAtEndOfNode,ve=e.isAtStartOfNode,De=e.isEmptyObject,Ie=e.isExtensionRulesEnabled,Fe=e.isFunction,Me=e.isList,je=e.isMacOS,Le=e.isMarkActive,Ke=e.isNodeActive,b=e.isNodeEmpty,Ge=e.isNodeSelection,qe=e.isNumber,He=e.isPlainObject,ze=e.isRegExp,Je=e.isSafari,Ve=e.isString,We=e.isTextSelection,Ue=e.isiOS,Ye=e.markInputRule,Qe=e.markPasteRule,Xe=e.mergeAttributes,Ze=e.mergeDeep,$e=e.minMax,et=e.nodeInputRule,tt=e.nodePasteRule,nt=e.objectIncludes,ot=e.pasteRulesPlugin,it=e.posToDOMRect,rt=e.removeDuplicates,st=e.resolveFocusPosition,lt=e.rewriteUnknownContent,at=e.selectionToInsertionEnd,dt=e.splitExtensions,pt=e.textInputRule,ct=e.textPasteRule,ut=e.textblockTypeInputRule,gt=e.wrappingInputRule;var d=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(d==null||d.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var n=d.modules["@tiptap/pm/state"];if(n==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/state" is unavailable');var xt=n.AllSelection,mt=n.EditorState,bt=n.NodeSelection,k=n.Plugin,y=n.PluginKey,kt=n.Selection,yt=n.SelectionRange,ht=n.TextSelection,Et=n.Transaction;var p=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(p==null||p.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var o=p.modules["@tiptap/pm/view"];if(o==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/view" is unavailable');var h=o.Decoration,E=o.DecorationSet,Pt=o.EditorView,St=o.__endComposition,Rt=o.__parseFromClipboard;var c=m.create({name:"placeholder",addOptions(){return{emptyEditorClass:"is-editor-empty",emptyNodeClass:"is-empty",placeholder:"Write something \u2026",showOnlyWhenEditable:!0,showOnlyCurrent:!0,includeChildren:!1}},addProseMirrorPlugins(){return[new k({key:new y("placeholder"),props:{decorations:({doc:t,selection:s})=>{let l=this.editor.isEditable||!this.options.showOnlyWhenEditable,{anchor:u}=s,g=[];if(!l)return null;let R=this.editor.isEmpty;return t.descendants((i,r)=>{let _=u>=r&&u<=r+i.nodeSize,C=!i.isLeaf&&b(i);if((_||!this.options.showOnlyCurrent)&&C){let x=[this.options.emptyNodeClass];R&&x.push(this.options.emptyEditorClass);let T=h.node(r,r+i.nodeSize,{class:x.join(" "),"data-placeholder":typeof this.options.placeholder=="function"?this.options.placeholder({editor:this.editor,node:i,pos:r,hasAnchor:_}):this.options.placeholder});g.push(T)}return this.options.includeChildren}),E.create(t,g)}}})]}});var f="__LEPTOS_TIPTAP_BRIDGE__";function w(){let t=globalThis,s=t[f];if(s!=null)return s;let l={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[f]=l,l}function P(){return w()}function S(t){P().registerExtension(t)}var A={name:"placeholder",create:({placeholder:t})=>t==null?c:c.configure({placeholder:t})};function Ft(){S(A)}export{Ft as register_placeholder}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_strike.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_strike.js index 259157d5..5a561ac0 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_strike.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_strike.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=t.CommandManager,b=t.Editor,y=t.Extension,h=t.InputRule,r=t.Mark,R=t.Node,E=t.NodePos,f=t.NodeView,S=t.PasteRule,P=t.Tracker,C=t.callOrReturn,T=t.canInsertNode,A=t.combineTransactionSteps,N=t.createChainableState,O=t.createDocument,B=t.createNodeFromContent,w=t.createStyleTag,M=t.defaultBlockAt,v=t.deleteProps,I=t.elementFromString,F=t.escapeForRegEx,D=t.extensions,j=t.findChildren,L=t.findChildrenInRange,K=t.findDuplicates,H=t.findParentNode,q=t.findParentNodeClosestToPos,G=t.fromString,z=t.generateHTML,J=t.generateJSON,U=t.generateText,V=t.getAttributes,Y=t.getAttributesFromExtensions,$=t.getChangedRanges,Q=t.getDebugJSON,W=t.getExtensionField,X=t.getHTMLFromFragment,Z=t.getMarkAttributes,tt=t.getMarkRange,et=t.getMarkType,nt=t.getMarksBetween,ot=t.getNodeAtPosition,it=t.getNodeAttributes,rt=t.getNodeType,st=t.getRenderedAttributes,at=t.getSchema,lt=t.getSchemaByResolvedExtensions,dt=t.getSchemaTypeByName,pt=t.getSchemaTypeNameByName,ct=t.getSplittedAttributes,ut=t.getText,gt=t.getTextBetween,_t=t.getTextContentFromNodes,xt=t.getTextSerializersFromSchema,mt=t.injectExtensionAttributesToParseRule,kt=t.inputRulesPlugin,bt=t.isActive,yt=t.isAtEndOfNode,ht=t.isAtStartOfNode,Rt=t.isEmptyObject,Et=t.isExtensionRulesEnabled,ft=t.isFunction,St=t.isList,Pt=t.isMacOS,Ct=t.isMarkActive,Tt=t.isNodeActive,At=t.isNodeEmpty,Nt=t.isNodeSelection,Ot=t.isNumber,Bt=t.isPlainObject,wt=t.isRegExp,Mt=t.isSafari,vt=t.isString,It=t.isTextSelection,Ft=t.isiOS,s=t.markInputRule,a=t.markPasteRule,l=t.mergeAttributes,Dt=t.mergeDeep,jt=t.minMax,Lt=t.nodeInputRule,Kt=t.nodePasteRule,Ht=t.objectIncludes,qt=t.pasteRulesPlugin,Gt=t.posToDOMRect,zt=t.removeDuplicates,Jt=t.resolveFocusPosition,Ut=t.rewriteUnknownContent,Vt=t.selectionToInsertionEnd,Yt=t.splitExtensions,$t=t.textInputRule,Qt=t.textPasteRule,Wt=t.textblockTypeInputRule,Xt=t.wrappingInputRule;var g=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/,_=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g,d=r.create({name:"strike",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"s"},{tag:"del"},{tag:"strike"},{style:"text-decoration",consuming:!1,getAttrs:e=>e.includes("line-through")?{}:!1}]},renderHTML({HTMLAttributes:e}){return["s",l(this.options.HTMLAttributes,e),0]},addCommands(){return{setStrike:()=>({commands:e})=>e.setMark(this.name),toggleStrike:()=>({commands:e})=>e.toggleMark(this.name),unsetStrike:()=>({commands:e})=>e.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-s":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[s({find:g,type:this.type})]},addPasteRules(){return[a({find:_,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function x(){let e=globalThis,o=e[p];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[p]=i,i}function c(){return x()}function u(e){c().registerExtension(e)}var m={name:"strike",create:()=>d,commands:{set_strike:e=>e.chain().focus().setStrike().run(),toggle_strike:e=>e.chain().focus().toggleStrike().run(),unset_strike:e=>e.chain().focus().unsetStrike().run()},selection_keys:["strike"],selection_state:e=>({strike:e.isActive("strike")})};function ae(){u(m)}export{ae as register_strike}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var k=e.CommandManager,b=e.Editor,y=e.Extension,h=e.InputRule,r=e.Mark,f=e.Node,R=e.NodePos,E=e.NodeView,S=e.PasteRule,P=e.Tracker,C=e.callOrReturn,T=e.canInsertNode,A=e.combineTransactionSteps,w=e.createChainableState,N=e.createDocument,O=e.createNodeFromContent,B=e.createStyleTag,M=e.defaultBlockAt,v=e.deleteProps,I=e.elementFromString,F=e.escapeForRegEx,D=e.extensions,j=e.findChildren,L=e.findChildrenInRange,K=e.findDuplicates,H=e.findParentNode,q=e.findParentNodeClosestToPos,G=e.fromString,z=e.generateHTML,J=e.generateJSON,U=e.generateText,V=e.getAttributes,Y=e.getAttributesFromExtensions,$=e.getChangedRanges,Q=e.getDebugJSON,W=e.getExtensionField,X=e.getHTMLFromFragment,Z=e.getMarkAttributes,ee=e.getMarkRange,te=e.getMarkType,ne=e.getMarksBetween,oe=e.getNodeAtPosition,ie=e.getNodeAttributes,re=e.getNodeType,se=e.getRenderedAttributes,le=e.getSchema,ae=e.getSchemaByResolvedExtensions,de=e.getSchemaTypeByName,pe=e.getSchemaTypeNameByName,ue=e.getSplittedAttributes,ce=e.getText,ge=e.getTextBetween,_e=e.getTextContentFromNodes,xe=e.getTextSerializersFromSchema,me=e.injectExtensionAttributesToParseRule,ke=e.inputRulesPlugin,be=e.isActive,ye=e.isAtEndOfNode,he=e.isAtStartOfNode,fe=e.isEmptyObject,Re=e.isExtensionRulesEnabled,Ee=e.isFunction,Se=e.isList,Pe=e.isMacOS,Ce=e.isMarkActive,Te=e.isNodeActive,Ae=e.isNodeEmpty,we=e.isNodeSelection,Ne=e.isNumber,Oe=e.isPlainObject,Be=e.isRegExp,Me=e.isSafari,ve=e.isString,Ie=e.isTextSelection,Fe=e.isiOS,s=e.markInputRule,l=e.markPasteRule,a=e.mergeAttributes,De=e.mergeDeep,je=e.minMax,Le=e.nodeInputRule,Ke=e.nodePasteRule,He=e.objectIncludes,qe=e.pasteRulesPlugin,Ge=e.posToDOMRect,ze=e.removeDuplicates,Je=e.resolveFocusPosition,Ue=e.rewriteUnknownContent,Ve=e.selectionToInsertionEnd,Ye=e.splitExtensions,$e=e.textInputRule,Qe=e.textPasteRule,We=e.textblockTypeInputRule,Xe=e.wrappingInputRule;var g=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))$/,_=/(?:^|\s)(~~(?!\s+~~)((?:[^~]+))~~(?!\s+~~))/g,d=r.create({name:"strike",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"s"},{tag:"del"},{tag:"strike"},{style:"text-decoration",consuming:!1,getAttrs:t=>t.includes("line-through")?{}:!1}]},renderHTML({HTMLAttributes:t}){return["s",a(this.options.HTMLAttributes,t),0]},addCommands(){return{setStrike:()=>({commands:t})=>t.setMark(this.name),toggleStrike:()=>({commands:t})=>t.toggleMark(this.name),unsetStrike:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-Shift-s":()=>this.editor.commands.toggleStrike()}},addInputRules(){return[s({find:g,type:this.type})]},addPasteRules(){return[l({find:_,type:this.type})]}});var p="__LEPTOS_TIPTAP_BRIDGE__";function x(){let t=globalThis,o=t[p];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[p]=i,i}function u(){return x()}function c(t){u().registerExtension(t)}var m={name:"strike",create:()=>d,commands:{set_strike:t=>t.chain().focus().setStrike().run(),toggle_strike:t=>t.chain().focus().toggleStrike().run(),unset_strike:t=>t.chain().focus().unsetStrike().run()},selection_keys:["strike"],selection_state:t=>({strike:t.isActive("strike")})};function lt(){c(m)}export{lt as register_strike}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table.js new file mode 100644 index 00000000..7a4d8f73 --- /dev/null +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table.js @@ -0,0 +1 @@ +var A=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(A==null||A.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var o=A.modules["@tiptap/core"];if(o==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var fe=o.CommandManager,ke=o.Editor,Ce=o.Extension,ye=o.InputRule,Te=o.Mark,W=o.Node,we=o.NodePos,Re=o.NodeView,Se=o.PasteRule,Ee=o.Tracker,j=o.callOrReturn,Ae=o.canInsertNode,Pe=o.combineTransactionSteps,Ne=o.createChainableState,ve=o.createDocument,Be=o.createNodeFromContent,Me=o.createStyleTag,Oe=o.defaultBlockAt,Ie=o.deleteProps,He=o.elementFromString,De=o.escapeForRegEx,Fe=o.extensions,We=o.findChildren,je=o.findChildrenInRange,ze=o.findDuplicates,Ke=o.findParentNode,y=o.findParentNodeClosestToPos,Le=o.fromString,$e=o.generateHTML,Ve=o.generateJSON,Ge=o.generateText,qe=o.getAttributes,Je=o.getAttributesFromExtensions,Ue=o.getChangedRanges,Ye=o.getDebugJSON,z=o.getExtensionField,Qe=o.getHTMLFromFragment,Xe=o.getMarkAttributes,Ze=o.getMarkRange,et=o.getMarkType,tt=o.getMarksBetween,ot=o.getNodeAtPosition,nt=o.getNodeAttributes,rt=o.getNodeType,lt=o.getRenderedAttributes,it=o.getSchema,st=o.getSchemaByResolvedExtensions,at=o.getSchemaTypeByName,dt=o.getSchemaTypeNameByName,ct=o.getSplittedAttributes,pt=o.getText,ut=o.getTextBetween,gt=o.getTextContentFromNodes,bt=o.getTextSerializersFromSchema,mt=o.injectExtensionAttributesToParseRule,_t=o.inputRulesPlugin,xt=o.isActive,ht=o.isAtEndOfNode,ft=o.isAtStartOfNode,kt=o.isEmptyObject,Ct=o.isExtensionRulesEnabled,yt=o.isFunction,Tt=o.isList,wt=o.isMacOS,Rt=o.isMarkActive,St=o.isNodeActive,Et=o.isNodeEmpty,At=o.isNodeSelection,Pt=o.isNumber,Nt=o.isPlainObject,vt=o.isRegExp,Bt=o.isSafari,Mt=o.isString,Ot=o.isTextSelection,It=o.isiOS,Ht=o.markInputRule,Dt=o.markPasteRule,K=o.mergeAttributes,Ft=o.mergeDeep,Wt=o.minMax,jt=o.nodeInputRule,zt=o.nodePasteRule,Kt=o.objectIncludes,Lt=o.pasteRulesPlugin,$t=o.posToDOMRect,Vt=o.removeDuplicates,Gt=o.resolveFocusPosition,qt=o.rewriteUnknownContent,Jt=o.selectionToInsertionEnd,Ut=o.splitExtensions,Yt=o.textInputRule,Qt=o.textPasteRule,Xt=o.textblockTypeInputRule,Zt=o.wrappingInputRule;var P=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(P==null||P.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var b=P.modules["@tiptap/pm/state"];if(b==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/state" is unavailable');var to=b.AllSelection,oo=b.EditorState,no=b.NodeSelection,ro=b.Plugin,lo=b.PluginKey,io=b.Selection,so=b.SelectionRange,T=b.TextSelection,ao=b.Transaction;var N=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(N==null||N.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var n=N.modules["@tiptap/pm/tables"];if(n==null)throw new Error('leptos-tiptap bridge module "@tiptap/pm/tables" is unavailable');var po=n.CellBookmark,h=n.CellSelection,uo=n.ResizeState,v=n.TableMap,go=n.TableView,bo=n.__clipCells,mo=n.__insertCells,_o=n.__pastedCells,xo=n.addColSpan,ho=n.addColumn,L=n.addColumnAfter,$=n.addColumnBefore,fo=n.addRow,V=n.addRowAfter,G=n.addRowBefore,q=n.cellAround,ko=n.cellNear,Co=n.colCount,yo=n.columnIsHeader,J=n.columnResizing,To=n.columnResizingPluginKey,wo=n.deleteCellSelection,U=n.deleteColumn,Y=n.deleteRow,Q=n.deleteTable,Ro=n.findCell,So=n.findCellPos,Eo=n.findCellRange,B=n.findTable,X=n.fixTables,Ao=n.fixTablesKey,M=n.goToNextCell,Po=n.handlePaste,No=n.inSameTable,vo=n.isInTable,O=n.mergeCells,Bo=n.moveCellForward,Mo=n.moveTableColumn,Oo=n.moveTableRow,Io=n.nextCell,Ho=n.pointsAtCell,Do=n.removeColSpan,Fo=n.removeColumn,Wo=n.removeRow,jo=n.rowIsHeader,zo=n.selectedRect,Ko=n.selectionCell,Z=n.setCellAttr,I=n.splitCell,Lo=n.splitCellWithType,ee=n.tableEditing,$o=n.tableEditingKey,Vo=n.tableNodeTypes,Go=n.tableNodes,H=n.toggleHeader,te=n.toggleHeaderCell,qo=n.toggleHeaderColumn,Jo=n.toggleHeaderRow,Uo=n.updateColumnsOnResize;function D(e,t){return t?["width",`${Math.max(t,e)}px`]:["min-width",`${e}px`]}function oe(e,t,r,l,s,i){var a;let c=0,u=!0,d=t.firstChild,m=e.firstChild;if(m!==null)for(let p=0,f=0;p{let l=e.nodes[r];l.spec.tableRole&&(t[l.spec.tableRole]=l)}),e.cached.tableNodeTypes=t,t}function pe(e,t,r,l,s){let i=ce(e),a=[],c=[];for(let d=0;d{let{selection:t}=e.state;if(!ue(t))return!1;let r=0,l=y(t.ranges[0].$from,i=>i.type.name==="table");return l?.node.descendants(i=>{if(i.type.name==="table")return!1;["tableCell","tableHeader"].includes(i.type.name)&&(r+=1)}),r===t.ranges.length?(e.commands.deleteTable(),!0):!1},re=W.create({name:"table",addOptions(){return{HTMLAttributes:{},resizable:!1,renderWrapper:!1,handleWidth:5,cellMinWidth:25,View:C,lastColumnResizable:!0,allowTableNodeSelection:!1}},content:"tableRow+",tableRole:"table",isolating:!0,group:"block",parseHTML(){return[{tag:"table"}]},renderHTML({node:e,HTMLAttributes:t}){let{colgroup:r,tableWidth:l,tableMinWidth:s}=de(e,this.options.cellMinWidth),i=["table",K(this.options.HTMLAttributes,t,{style:l?`width: ${l}`:`min-width: ${s}`}),r,["tbody",0]];return this.options.renderWrapper?["div",{class:"tableWrapper"},i]:i},addCommands(){return{insertTable:({rows:e=3,cols:t=3,withHeaderRow:r=!0}={})=>({tr:l,dispatch:s,editor:i})=>{let a=pe(i.schema,e,t,r);if(s){let c=l.selection.from+1;l.replaceSelectionWith(a).scrollIntoView().setSelection(T.near(l.doc.resolve(c)))}return!0},addColumnBefore:()=>({state:e,dispatch:t})=>$(e,t),addColumnAfter:()=>({state:e,dispatch:t})=>L(e,t),deleteColumn:()=>({state:e,dispatch:t})=>U(e,t),addRowBefore:()=>({state:e,dispatch:t})=>G(e,t),addRowAfter:()=>({state:e,dispatch:t})=>V(e,t),deleteRow:()=>({state:e,dispatch:t})=>Y(e,t),deleteTable:()=>({state:e,dispatch:t})=>Q(e,t),mergeCells:()=>({state:e,dispatch:t})=>O(e,t),splitCell:()=>({state:e,dispatch:t})=>I(e,t),toggleHeaderColumn:()=>({state:e,dispatch:t})=>H("column")(e,t),toggleHeaderRow:()=>({state:e,dispatch:t})=>H("row")(e,t),toggleHeaderCell:()=>({state:e,dispatch:t})=>te(e,t),mergeOrSplit:()=>({state:e,dispatch:t})=>O(e,t)?!0:I(e,t),setCellAttribute:(e,t)=>({state:r,dispatch:l})=>Z(e,t)(r,l),goToNextCell:()=>({state:e,dispatch:t})=>M(1)(e,t),goToPreviousCell:()=>({state:e,dispatch:t})=>M(-1)(e,t),fixTables:()=>({state:e,dispatch:t})=>(t&&X(e),!0),setCellSelection:e=>({tr:t,dispatch:r})=>{if(r){let l=h.create(t.doc,e.anchorCell,e.headCell);t.setSelection(l)}return!0}}},addKeyboardShortcuts(){return{Tab:()=>this.editor.commands.goToNextCell()?!0:this.editor.can().addRowAfter()?this.editor.chain().addRowAfter().goToNextCell().run():!1,"Shift-Tab":()=>this.editor.commands.goToPreviousCell(),Backspace:w,"Mod-Backspace":w,Delete:w,"Mod-Delete":w}},addProseMirrorPlugins(){return[...this.options.resizable&&this.editor.isEditable?[J({handleWidth:this.options.handleWidth,cellMinWidth:this.options.cellMinWidth,defaultCellMinWidth:this.options.cellMinWidth,View:this.options.View,lastColumnResizable:this.options.lastColumnResizable})]:[],ee({allowTableNodeSelection:this.options.allowTableNodeSelection})]},extendNodeSchema(e){let t={name:e.name,options:e.options,storage:e.storage};return{tableRole:j(z(e,"tableRole",t))}}});var le="__LEPTOS_TIPTAP_BRIDGE__";function ge(){let e=globalThis,t=e[le];if(t!=null)return t;let r={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[le]=r,r}function ie(){return ge()}function se(e){ie().registerExtension(e)}function be(e){let t=q(e.state.selection.$from);if(!t)return!1;let r=t.nodeAfter,l=e.state.schema.nodes.paragraph;if(!r||!l)return!1;let s=t.pos+1,i=t.pos+r.nodeSize-1,a=e.state.tr.delete(s,i);a=a.insert(s,l.create());let c=Math.min(s+1,a.doc.content.size);return a=a.setSelection(T.near(a.doc.resolve(c))).scrollIntoView(),e.view.dispatch(a),!0}function me(e){let t=y(e.state.selection.$from,s=>s.type.name==="table");if(!t)return!1;let r=t.node.attrs.hiddenBorders===!0,l=e.state.tr.setNodeMarkup(t.pos,void 0,{...t.node.attrs,hiddenBorders:!r}).scrollIntoView();return e.view.dispatch(l),!0}function _e(e,t){let r=B(e.state.selection.$from);if(!r||!Number.isInteger(t))return!1;let l=v.get(r.node);if(t<0||t>=l.height||l.width<=0)return!1;let s=l.positionAt(t,0,r.node),i=l.positionAt(t,l.width-1,r.node),a=e.state.doc.resolve(r.start+s),c=e.state.doc.resolve(r.start+i),u=e.state.tr.setSelection(h.rowSelection(c,a)).scrollIntoView();return e.view.dispatch(u),e.view.focus(),!0}function xe(e,t){let r=B(e.state.selection.$from);if(!r||!Number.isInteger(t))return!1;let l=v.get(r.node);if(t<0||t>=l.width||l.height<=0)return!1;let s=l.positionAt(0,t,r.node),i=l.positionAt(l.height-1,t,r.node),a=e.state.doc.resolve(r.start+s),c=e.state.doc.resolve(r.start+i),u=e.state.tr.setSelection(h.colSelection(c,a)).scrollIntoView();return e.view.dispatch(u),e.view.focus(),!0}var F=class extends C{constructor(t,r,l){super(t,r),this.syncTableAttributes(t)}update(t){let r=super.update(t);return r&&this.syncTableAttributes(t),r}syncTableAttributes(t){let r=t.attrs.blockId;typeof r=="string"&&r.length>0?this.table.setAttribute("data-block-id",r):this.table.removeAttribute("data-block-id"),t.attrs.hiddenBorders===!0?this.table.setAttribute("data-hidden-borders","true"):this.table.removeAttribute("data-hidden-borders")}},he={name:"table",create:()=>re.extend({addAttributes(){return{...this.parent?.(),blockId:{default:null,parseHTML:e=>e.getAttribute("data-block-id"),renderHTML:e=>e.blockId?{"data-block-id":e.blockId}:{}},hiddenBorders:{default:!1,parseHTML:e=>e.getAttribute("data-hidden-borders")==="true",renderHTML:e=>e.hiddenBorders?{"data-hidden-borders":"true"}:{}}}}}).configure({resizable:!0,handleWidth:8,cellMinWidth:84,View:F,lastColumnResizable:!0}),commands:{insert_table:(e,t)=>t.kind==="insert_table"&&e.chain().focus().insertTable({rows:t.rows??3,cols:t.cols??3,withHeaderRow:t.with_header_row??!0}).run(),add_table_row_after:e=>e.chain().focus().addRowAfter().run(),add_table_column_after:e=>e.chain().focus().addColumnAfter().run(),delete_table_row:e=>e.chain().focus().deleteRow().run(),delete_table_column:e=>e.chain().focus().deleteColumn().run(),delete_table:e=>e.chain().focus().deleteTable().run(),clear_table_cell:e=>be(e),toggle_table_header_row:e=>e.chain().focus().toggleHeaderRow().run(),toggle_table_header_column:e=>e.chain().focus().toggleHeaderColumn().run(),toggle_table_hidden_borders:e=>me(e),select_table_row:(e,t)=>t.kind==="select_table_row"&&_e(e,t.index),select_table_column:(e,t)=>t.kind==="select_table_column"&&xe(e,t.index)}};function cn(){se(he)}export{cn as register_table}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_cell.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_cell.js new file mode 100644 index 00000000..edfcbc18 --- /dev/null +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_cell.js @@ -0,0 +1 @@ +var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=i.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var _=e.CommandManager,x=e.Editor,m=e.Extension,b=e.InputRule,k=e.Mark,r=e.Node,y=e.NodePos,h=e.NodeView,E=e.PasteRule,f=e.Tracker,R=e.callOrReturn,P=e.canInsertNode,T=e.combineTransactionSteps,C=e.createChainableState,A=e.createDocument,S=e.createNodeFromContent,w=e.createStyleTag,N=e.defaultBlockAt,O=e.deleteProps,B=e.elementFromString,v=e.escapeForRegEx,M=e.extensions,I=e.findChildren,F=e.findChildrenInRange,D=e.findDuplicates,j=e.findParentNode,L=e.findParentNodeClosestToPos,H=e.fromString,K=e.generateHTML,q=e.generateJSON,G=e.generateText,z=e.getAttributes,J=e.getAttributesFromExtensions,U=e.getChangedRanges,V=e.getDebugJSON,Y=e.getExtensionField,Q=e.getHTMLFromFragment,W=e.getMarkAttributes,X=e.getMarkRange,Z=e.getMarkType,$=e.getMarksBetween,ee=e.getNodeAtPosition,te=e.getNodeAttributes,ne=e.getNodeType,oe=e.getRenderedAttributes,ie=e.getSchema,re=e.getSchemaByResolvedExtensions,se=e.getSchemaTypeByName,le=e.getSchemaTypeNameByName,ae=e.getSplittedAttributes,de=e.getText,pe=e.getTextBetween,ce=e.getTextContentFromNodes,ue=e.getTextSerializersFromSchema,ge=e.injectExtensionAttributesToParseRule,_e=e.inputRulesPlugin,xe=e.isActive,me=e.isAtEndOfNode,be=e.isAtStartOfNode,ke=e.isEmptyObject,ye=e.isExtensionRulesEnabled,he=e.isFunction,Ee=e.isList,fe=e.isMacOS,Re=e.isMarkActive,Pe=e.isNodeActive,Te=e.isNodeEmpty,Ce=e.isNodeSelection,Ae=e.isNumber,Se=e.isPlainObject,we=e.isRegExp,Ne=e.isSafari,Oe=e.isString,Be=e.isTextSelection,ve=e.isiOS,Me=e.markInputRule,Ie=e.markPasteRule,s=e.mergeAttributes,Fe=e.mergeDeep,De=e.minMax,je=e.nodeInputRule,Le=e.nodePasteRule,He=e.objectIncludes,Ke=e.pasteRulesPlugin,qe=e.posToDOMRect,Ge=e.removeDuplicates,ze=e.resolveFocusPosition,Je=e.rewriteUnknownContent,Ue=e.selectionToInsertionEnd,Ve=e.splitExtensions,Ye=e.textInputRule,Qe=e.textPasteRule,We=e.textblockTypeInputRule,Xe=e.wrappingInputRule;var l=r.create({name:"tableCell",addOptions(){return{HTMLAttributes:{}}},content:"block+",addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:t=>{let n=t.getAttribute("colwidth");return n?n.split(",").map(c=>parseInt(c,10)):null}}}},tableRole:"cell",isolating:!0,parseHTML(){return[{tag:"td"}]},renderHTML({HTMLAttributes:t}){return["td",s(this.options.HTMLAttributes,t),0]}});var a="__LEPTOS_TIPTAP_BRIDGE__";function u(){let t=globalThis,n=t[a];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[a]=o,o}function d(){return u()}function p(t){d().registerExtension(t)}var g={name:"table_cell",create:()=>l};function st(){p(g)}export{st as register_table_cell}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_header.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_header.js new file mode 100644 index 00000000..12637c76 --- /dev/null +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_header.js @@ -0,0 +1 @@ +var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=i.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var _=e.CommandManager,x=e.Editor,m=e.Extension,b=e.InputRule,k=e.Mark,r=e.Node,y=e.NodePos,h=e.NodeView,E=e.PasteRule,f=e.Tracker,R=e.callOrReturn,P=e.canInsertNode,T=e.combineTransactionSteps,A=e.createChainableState,C=e.createDocument,S=e.createNodeFromContent,w=e.createStyleTag,N=e.defaultBlockAt,O=e.deleteProps,B=e.elementFromString,v=e.escapeForRegEx,M=e.extensions,I=e.findChildren,F=e.findChildrenInRange,D=e.findDuplicates,j=e.findParentNode,L=e.findParentNodeClosestToPos,H=e.fromString,K=e.generateHTML,q=e.generateJSON,G=e.generateText,z=e.getAttributes,J=e.getAttributesFromExtensions,U=e.getChangedRanges,V=e.getDebugJSON,Y=e.getExtensionField,Q=e.getHTMLFromFragment,W=e.getMarkAttributes,X=e.getMarkRange,Z=e.getMarkType,$=e.getMarksBetween,ee=e.getNodeAtPosition,te=e.getNodeAttributes,ne=e.getNodeType,oe=e.getRenderedAttributes,ie=e.getSchema,re=e.getSchemaByResolvedExtensions,se=e.getSchemaTypeByName,le=e.getSchemaTypeNameByName,ae=e.getSplittedAttributes,de=e.getText,pe=e.getTextBetween,ce=e.getTextContentFromNodes,ue=e.getTextSerializersFromSchema,ge=e.injectExtensionAttributesToParseRule,_e=e.inputRulesPlugin,xe=e.isActive,me=e.isAtEndOfNode,be=e.isAtStartOfNode,ke=e.isEmptyObject,ye=e.isExtensionRulesEnabled,he=e.isFunction,Ee=e.isList,fe=e.isMacOS,Re=e.isMarkActive,Pe=e.isNodeActive,Te=e.isNodeEmpty,Ae=e.isNodeSelection,Ce=e.isNumber,Se=e.isPlainObject,we=e.isRegExp,Ne=e.isSafari,Oe=e.isString,Be=e.isTextSelection,ve=e.isiOS,Me=e.markInputRule,Ie=e.markPasteRule,s=e.mergeAttributes,Fe=e.mergeDeep,De=e.minMax,je=e.nodeInputRule,Le=e.nodePasteRule,He=e.objectIncludes,Ke=e.pasteRulesPlugin,qe=e.posToDOMRect,Ge=e.removeDuplicates,ze=e.resolveFocusPosition,Je=e.rewriteUnknownContent,Ue=e.selectionToInsertionEnd,Ve=e.splitExtensions,Ye=e.textInputRule,Qe=e.textPasteRule,We=e.textblockTypeInputRule,Xe=e.wrappingInputRule;var l=r.create({name:"tableHeader",addOptions(){return{HTMLAttributes:{}}},content:"block+",addAttributes(){return{colspan:{default:1},rowspan:{default:1},colwidth:{default:null,parseHTML:t=>{let n=t.getAttribute("colwidth");return n?n.split(",").map(c=>parseInt(c,10)):null}}}},tableRole:"header_cell",isolating:!0,parseHTML(){return[{tag:"th"}]},renderHTML({HTMLAttributes:t}){return["th",s(this.options.HTMLAttributes,t),0]}});var a="__LEPTOS_TIPTAP_BRIDGE__";function u(){let t=globalThis,n=t[a];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[a]=o,o}function d(){return u()}function p(t){d().registerExtension(t)}var g={name:"table_header",create:()=>l};function st(){p(g)}export{st as register_table_header}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_row.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_row.js new file mode 100644 index 00000000..20386eb3 --- /dev/null +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_table_row.js @@ -0,0 +1 @@ +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=e.CommandManager,_=e.Editor,x=e.Extension,m=e.InputRule,b=e.Mark,r=e.Node,k=e.NodePos,y=e.NodeView,E=e.PasteRule,h=e.Tracker,R=e.callOrReturn,f=e.canInsertNode,P=e.combineTransactionSteps,T=e.createChainableState,C=e.createDocument,A=e.createNodeFromContent,S=e.createStyleTag,w=e.defaultBlockAt,N=e.deleteProps,O=e.elementFromString,B=e.escapeForRegEx,v=e.extensions,M=e.findChildren,I=e.findChildrenInRange,F=e.findDuplicates,D=e.findParentNode,j=e.findParentNodeClosestToPos,L=e.fromString,H=e.generateHTML,K=e.generateJSON,q=e.generateText,G=e.getAttributes,z=e.getAttributesFromExtensions,J=e.getChangedRanges,U=e.getDebugJSON,V=e.getExtensionField,Y=e.getHTMLFromFragment,Q=e.getMarkAttributes,W=e.getMarkRange,X=e.getMarkType,Z=e.getMarksBetween,$=e.getNodeAtPosition,ee=e.getNodeAttributes,te=e.getNodeType,ne=e.getRenderedAttributes,oe=e.getSchema,ie=e.getSchemaByResolvedExtensions,re=e.getSchemaTypeByName,se=e.getSchemaTypeNameByName,le=e.getSplittedAttributes,ae=e.getText,de=e.getTextBetween,pe=e.getTextContentFromNodes,ce=e.getTextSerializersFromSchema,ue=e.injectExtensionAttributesToParseRule,ge=e.inputRulesPlugin,_e=e.isActive,xe=e.isAtEndOfNode,me=e.isAtStartOfNode,be=e.isEmptyObject,ke=e.isExtensionRulesEnabled,ye=e.isFunction,Ee=e.isList,he=e.isMacOS,Re=e.isMarkActive,fe=e.isNodeActive,Pe=e.isNodeEmpty,Te=e.isNodeSelection,Ce=e.isNumber,Ae=e.isPlainObject,Se=e.isRegExp,we=e.isSafari,Ne=e.isString,Oe=e.isTextSelection,Be=e.isiOS,ve=e.markInputRule,Me=e.markPasteRule,s=e.mergeAttributes,Ie=e.mergeDeep,Fe=e.minMax,De=e.nodeInputRule,je=e.nodePasteRule,Le=e.objectIncludes,He=e.pasteRulesPlugin,Ke=e.posToDOMRect,qe=e.removeDuplicates,Ge=e.resolveFocusPosition,ze=e.rewriteUnknownContent,Je=e.selectionToInsertionEnd,Ue=e.splitExtensions,Ve=e.textInputRule,Ye=e.textPasteRule,Qe=e.textblockTypeInputRule,We=e.wrappingInputRule;var l=r.create({name:"tableRow",addOptions(){return{HTMLAttributes:{}}},content:"(tableCell | tableHeader)*",tableRole:"row",parseHTML(){return[{tag:"tr"}]},renderHTML({HTMLAttributes:t}){return["tr",s(this.options.HTMLAttributes,t),0]}});var a="__LEPTOS_TIPTAP_BRIDGE__";function c(){let t=globalThis,o=t[a];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[a]=i,i}function d(){return c()}function p(t){d().registerExtension(t)}var u={name:"table_row",create:()=>l};function rt(){p(u)}export{rt as register_table_row}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_item.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_item.js index eaff37dc..a3566fac 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_item.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_item.js @@ -1 +1 @@ -var u=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(u==null||u.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=u.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var P=t.CommandManager,S=t.Editor,O=t.Extension,N=t.InputRule,v=t.Mark,x=t.Node,w=t.NodePos,B=t.NodeView,I=t.PasteRule,M=t.Tracker,D=t.callOrReturn,F=t.canInsertNode,L=t.combineTransactionSteps,j=t.createChainableState,H=t.createDocument,K=t.createNodeFromContent,q=t.createStyleTag,G=t.defaultBlockAt,z=t.deleteProps,J=t.elementFromString,V=t.escapeForRegEx,Y=t.extensions,$=t.findChildren,U=t.findChildrenInRange,W=t.findDuplicates,Q=t.findParentNode,X=t.findParentNodeClosestToPos,Z=t.fromString,tt=t.generateHTML,et=t.generateJSON,nt=t.generateText,ot=t.getAttributes,it=t.getAttributesFromExtensions,rt=t.getChangedRanges,st=t.getDebugJSON,at=t.getExtensionField,lt=t.getHTMLFromFragment,dt=t.getMarkAttributes,ct=t.getMarkRange,pt=t.getMarkType,ut=t.getMarksBetween,gt=t.getNodeAtPosition,mt=t.getNodeAttributes,_t=t.getNodeType,xt=t.getRenderedAttributes,kt=t.getSchema,bt=t.getSchemaByResolvedExtensions,yt=t.getSchemaTypeByName,ht=t.getSchemaTypeNameByName,ft=t.getSplittedAttributes,Et=t.getText,Rt=t.getTextBetween,Tt=t.getTextContentFromNodes,At=t.getTextSerializersFromSchema,Ct=t.injectExtensionAttributesToParseRule,Pt=t.inputRulesPlugin,St=t.isActive,Ot=t.isAtEndOfNode,Nt=t.isAtStartOfNode,vt=t.isEmptyObject,wt=t.isExtensionRulesEnabled,Bt=t.isFunction,It=t.isList,Mt=t.isMacOS,Dt=t.isMarkActive,Ft=t.isNodeActive,Lt=t.isNodeEmpty,jt=t.isNodeSelection,Ht=t.isNumber,Kt=t.isPlainObject,qt=t.isRegExp,Gt=t.isSafari,zt=t.isString,Jt=t.isTextSelection,Vt=t.isiOS,Yt=t.markInputRule,$t=t.markPasteRule,k=t.mergeAttributes,Ut=t.mergeDeep,Wt=t.minMax,Qt=t.nodeInputRule,Xt=t.nodePasteRule,Zt=t.objectIncludes,te=t.pasteRulesPlugin,ee=t.posToDOMRect,ne=t.removeDuplicates,oe=t.resolveFocusPosition,ie=t.rewriteUnknownContent,re=t.selectionToInsertionEnd,se=t.splitExtensions,ae=t.textInputRule,le=t.textPasteRule,de=t.textblockTypeInputRule,b=t.wrappingInputRule;var T=/^\s*(\[([( |x])?\])\s$/,y=x.create({name:"taskItem",addOptions(){return{nested:!1,HTMLAttributes:{},taskListTypeName:"taskList",a11y:void 0}},content(){return this.options.nested?"paragraph block*":"paragraph+"},defining:!0,addAttributes(){return{checked:{default:!1,keepOnSplit:!1,parseHTML:e=>{let r=e.getAttribute("data-checked");return r===""||r==="true"},renderHTML:e=>({"data-checked":e.checked})}}},parseHTML(){return[{tag:`li[data-type="${this.name}"]`,priority:51}]},renderHTML({node:e,HTMLAttributes:r}){return["li",k(this.options.HTMLAttributes,r,{"data-type":this.name}),["label",["input",{type:"checkbox",checked:e.attrs.checked?"checked":null}],["span"]],["div",0]]},addKeyboardShortcuts(){let e={Enter:()=>this.editor.commands.splitListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)};return this.options.nested?{...e,Tab:()=>this.editor.commands.sinkListItem(this.name)}:e},addNodeView(){return({node:e,HTMLAttributes:r,getPos:a,editor:l})=>{let s=document.createElement("li"),d=document.createElement("label"),R=document.createElement("span"),o=document.createElement("input"),g=document.createElement("div"),m=()=>{var n,i;o.ariaLabel=((i=(n=this.options.a11y)===null||n===void 0?void 0:n.checkboxLabel)===null||i===void 0?void 0:i.call(n,e,o.checked))||`Task item checkbox for ${e.textContent||"empty task item"}`};return m(),d.contentEditable="false",o.type="checkbox",o.addEventListener("mousedown",n=>n.preventDefault()),o.addEventListener("change",n=>{if(!l.isEditable&&!this.options.onReadOnlyChecked){o.checked=!o.checked;return}let{checked:i}=n.target;l.isEditable&&typeof a=="function"&&l.chain().focus(void 0,{scrollIntoView:!1}).command(({tr:_})=>{let c=a();if(typeof c!="number")return!1;let p=_.doc.nodeAt(c);return _.setNodeMarkup(c,void 0,{...p?.attrs,checked:i}),!0}).run(),!l.isEditable&&this.options.onReadOnlyChecked&&(this.options.onReadOnlyChecked(e,i)||(o.checked=!o.checked))}),Object.entries(this.options.HTMLAttributes).forEach(([n,i])=>{s.setAttribute(n,i)}),s.dataset.checked=e.attrs.checked,o.checked=e.attrs.checked,d.append(o,R),s.append(d,g),Object.entries(r).forEach(([n,i])=>{s.setAttribute(n,i)}),{dom:s,contentDOM:g,update:n=>n.type!==this.type?!1:(s.dataset.checked=n.attrs.checked,o.checked=n.attrs.checked,m(),!0)}}},addInputRules(){return[b({find:T,type:this.type,getAttributes:e=>({checked:e[e.length-1]==="x"})})]}});var h="__LEPTOS_TIPTAP_BRIDGE__";function A(){let e=globalThis,r=e[h];if(r!=null)return r;let a={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[h]=a,a}function f(){return A()}function E(e){f().registerExtension(e)}var C={name:"task_item",create:()=>y.configure({nested:!0})};function be(){E(C)}export{be as register_task_item}; +var u=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(u==null||u.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=u.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var P=e.CommandManager,S=e.Editor,w=e.Extension,O=e.InputRule,N=e.Mark,k=e.Node,v=e.NodePos,B=e.NodeView,I=e.PasteRule,M=e.Tracker,D=e.callOrReturn,F=e.canInsertNode,L=e.combineTransactionSteps,j=e.createChainableState,H=e.createDocument,K=e.createNodeFromContent,q=e.createStyleTag,G=e.defaultBlockAt,z=e.deleteProps,J=e.elementFromString,V=e.escapeForRegEx,Y=e.extensions,$=e.findChildren,U=e.findChildrenInRange,W=e.findDuplicates,Q=e.findParentNode,X=e.findParentNodeClosestToPos,Z=e.fromString,ee=e.generateHTML,te=e.generateJSON,ne=e.generateText,oe=e.getAttributes,ie=e.getAttributesFromExtensions,re=e.getChangedRanges,se=e.getDebugJSON,ae=e.getExtensionField,le=e.getHTMLFromFragment,de=e.getMarkAttributes,ce=e.getMarkRange,pe=e.getMarkType,ue=e.getMarksBetween,ge=e.getNodeAtPosition,_e=e.getNodeAttributes,me=e.getNodeType,ke=e.getRenderedAttributes,xe=e.getSchema,be=e.getSchemaByResolvedExtensions,ye=e.getSchemaTypeByName,he=e.getSchemaTypeNameByName,fe=e.getSplittedAttributes,Ee=e.getText,Re=e.getTextBetween,Te=e.getTextContentFromNodes,Ae=e.getTextSerializersFromSchema,Ce=e.injectExtensionAttributesToParseRule,Pe=e.inputRulesPlugin,Se=e.isActive,we=e.isAtEndOfNode,Oe=e.isAtStartOfNode,Ne=e.isEmptyObject,ve=e.isExtensionRulesEnabled,Be=e.isFunction,Ie=e.isList,Me=e.isMacOS,De=e.isMarkActive,Fe=e.isNodeActive,Le=e.isNodeEmpty,je=e.isNodeSelection,He=e.isNumber,Ke=e.isPlainObject,qe=e.isRegExp,Ge=e.isSafari,ze=e.isString,Je=e.isTextSelection,Ve=e.isiOS,Ye=e.markInputRule,$e=e.markPasteRule,x=e.mergeAttributes,Ue=e.mergeDeep,We=e.minMax,Qe=e.nodeInputRule,Xe=e.nodePasteRule,Ze=e.objectIncludes,et=e.pasteRulesPlugin,tt=e.posToDOMRect,nt=e.removeDuplicates,ot=e.resolveFocusPosition,it=e.rewriteUnknownContent,rt=e.selectionToInsertionEnd,st=e.splitExtensions,at=e.textInputRule,lt=e.textPasteRule,dt=e.textblockTypeInputRule,b=e.wrappingInputRule;var T=/^\s*(\[([( |x])?\])\s$/,y=k.create({name:"taskItem",addOptions(){return{nested:!1,HTMLAttributes:{},taskListTypeName:"taskList",a11y:void 0}},content(){return this.options.nested?"paragraph block*":"paragraph+"},defining:!0,addAttributes(){return{checked:{default:!1,keepOnSplit:!1,parseHTML:t=>{let r=t.getAttribute("data-checked");return r===""||r==="true"},renderHTML:t=>({"data-checked":t.checked})}}},parseHTML(){return[{tag:`li[data-type="${this.name}"]`,priority:51}]},renderHTML({node:t,HTMLAttributes:r}){return["li",x(this.options.HTMLAttributes,r,{"data-type":this.name}),["label",["input",{type:"checkbox",checked:t.attrs.checked?"checked":null}],["span"]],["div",0]]},addKeyboardShortcuts(){let t={Enter:()=>this.editor.commands.splitListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)};return this.options.nested?{...t,Tab:()=>this.editor.commands.sinkListItem(this.name)}:t},addNodeView(){return({node:t,HTMLAttributes:r,getPos:a,editor:l})=>{let s=document.createElement("li"),d=document.createElement("label"),R=document.createElement("span"),o=document.createElement("input"),g=document.createElement("div"),_=()=>{var n,i;o.ariaLabel=((i=(n=this.options.a11y)===null||n===void 0?void 0:n.checkboxLabel)===null||i===void 0?void 0:i.call(n,t,o.checked))||`Task item checkbox for ${t.textContent||"empty task item"}`};return _(),d.contentEditable="false",o.type="checkbox",o.addEventListener("mousedown",n=>n.preventDefault()),o.addEventListener("change",n=>{if(!l.isEditable&&!this.options.onReadOnlyChecked){o.checked=!o.checked;return}let{checked:i}=n.target;l.isEditable&&typeof a=="function"&&l.chain().focus(void 0,{scrollIntoView:!1}).command(({tr:m})=>{let c=a();if(typeof c!="number")return!1;let p=m.doc.nodeAt(c);return m.setNodeMarkup(c,void 0,{...p?.attrs,checked:i}),!0}).run(),!l.isEditable&&this.options.onReadOnlyChecked&&(this.options.onReadOnlyChecked(t,i)||(o.checked=!o.checked))}),Object.entries(this.options.HTMLAttributes).forEach(([n,i])=>{s.setAttribute(n,i)}),s.dataset.checked=t.attrs.checked,o.checked=t.attrs.checked,d.append(o,R),s.append(d,g),Object.entries(r).forEach(([n,i])=>{s.setAttribute(n,i)}),{dom:s,contentDOM:g,update:n=>n.type!==this.type?!1:(s.dataset.checked=n.attrs.checked,o.checked=n.attrs.checked,_(),!0)}}},addInputRules(){return[b({find:T,type:this.type,getAttributes:t=>({checked:t[t.length-1]==="x"})})]}});var h="__LEPTOS_TIPTAP_BRIDGE__";function A(){let t=globalThis,r=t[h];if(r!=null)return r;let a={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[h]=a,a}function f(){return A()}function E(t){f().registerExtension(t)}var C={name:"task_item",create:()=>y.configure({nested:!0})};function bt(){E(C)}export{bt as register_task_item}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_list.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_list.js index c5af0900..c3cddd1f 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_list.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_task_list.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=t.CommandManager,_=t.Editor,x=t.Extension,m=t.InputRule,k=t.Mark,r=t.Node,b=t.NodePos,y=t.NodeView,h=t.PasteRule,E=t.Tracker,R=t.callOrReturn,T=t.canInsertNode,f=t.combineTransactionSteps,P=t.createChainableState,C=t.createDocument,A=t.createNodeFromContent,S=t.createStyleTag,N=t.defaultBlockAt,O=t.deleteProps,B=t.elementFromString,w=t.escapeForRegEx,v=t.extensions,M=t.findChildren,I=t.findChildrenInRange,F=t.findDuplicates,D=t.findParentNode,L=t.findParentNodeClosestToPos,j=t.fromString,K=t.generateHTML,H=t.generateJSON,q=t.generateText,G=t.getAttributes,z=t.getAttributesFromExtensions,J=t.getChangedRanges,U=t.getDebugJSON,V=t.getExtensionField,Y=t.getHTMLFromFragment,$=t.getMarkAttributes,Q=t.getMarkRange,W=t.getMarkType,X=t.getMarksBetween,Z=t.getNodeAtPosition,tt=t.getNodeAttributes,et=t.getNodeType,nt=t.getRenderedAttributes,ot=t.getSchema,it=t.getSchemaByResolvedExtensions,rt=t.getSchemaTypeByName,st=t.getSchemaTypeNameByName,at=t.getSplittedAttributes,lt=t.getText,dt=t.getTextBetween,pt=t.getTextContentFromNodes,ct=t.getTextSerializersFromSchema,ut=t.injectExtensionAttributesToParseRule,gt=t.inputRulesPlugin,_t=t.isActive,xt=t.isAtEndOfNode,mt=t.isAtStartOfNode,kt=t.isEmptyObject,bt=t.isExtensionRulesEnabled,yt=t.isFunction,ht=t.isList,Et=t.isMacOS,Rt=t.isMarkActive,Tt=t.isNodeActive,ft=t.isNodeEmpty,Pt=t.isNodeSelection,Ct=t.isNumber,At=t.isPlainObject,St=t.isRegExp,Nt=t.isSafari,Ot=t.isString,Bt=t.isTextSelection,wt=t.isiOS,vt=t.markInputRule,Mt=t.markPasteRule,s=t.mergeAttributes,It=t.mergeDeep,Ft=t.minMax,Dt=t.nodeInputRule,Lt=t.nodePasteRule,jt=t.objectIncludes,Kt=t.pasteRulesPlugin,Ht=t.posToDOMRect,qt=t.removeDuplicates,Gt=t.resolveFocusPosition,zt=t.rewriteUnknownContent,Jt=t.selectionToInsertionEnd,Ut=t.splitExtensions,Vt=t.textInputRule,Yt=t.textPasteRule,$t=t.textblockTypeInputRule,Qt=t.wrappingInputRule;var a=r.create({name:"taskList",addOptions(){return{itemTypeName:"taskItem",HTMLAttributes:{}}},group:"block list",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul[data-type="${this.name}"]`,priority:51}]},renderHTML({HTMLAttributes:e}){return["ul",s(this.options.HTMLAttributes,e,{"data-type":this.name}),0]},addCommands(){return{toggleTaskList:()=>({commands:e})=>e.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}});var l="__LEPTOS_TIPTAP_BRIDGE__";function c(){let e=globalThis,o=e[l];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[l]=i,i}function d(){return c()}function p(e){d().registerExtension(e)}var u={name:"task_list",create:()=>a,commands:{toggle_task_list:e=>e.chain().focus().toggleTaskList().run()},selection_keys:["task_list"],selection_state:e=>({task_list:e.isActive("taskList")})};function re(){p(u)}export{re as register_task_list}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=t.CommandManager,_=t.Editor,m=t.Extension,x=t.InputRule,k=t.Mark,r=t.Node,b=t.NodePos,y=t.NodeView,h=t.PasteRule,E=t.Tracker,f=t.callOrReturn,R=t.canInsertNode,T=t.combineTransactionSteps,P=t.createChainableState,C=t.createDocument,A=t.createNodeFromContent,S=t.createStyleTag,N=t.defaultBlockAt,w=t.deleteProps,O=t.elementFromString,B=t.escapeForRegEx,v=t.extensions,M=t.findChildren,I=t.findChildrenInRange,F=t.findDuplicates,D=t.findParentNode,L=t.findParentNodeClosestToPos,j=t.fromString,K=t.generateHTML,H=t.generateJSON,q=t.generateText,G=t.getAttributes,z=t.getAttributesFromExtensions,J=t.getChangedRanges,U=t.getDebugJSON,V=t.getExtensionField,Y=t.getHTMLFromFragment,$=t.getMarkAttributes,Q=t.getMarkRange,W=t.getMarkType,X=t.getMarksBetween,Z=t.getNodeAtPosition,tt=t.getNodeAttributes,et=t.getNodeType,nt=t.getRenderedAttributes,ot=t.getSchema,it=t.getSchemaByResolvedExtensions,rt=t.getSchemaTypeByName,st=t.getSchemaTypeNameByName,lt=t.getSplittedAttributes,at=t.getText,dt=t.getTextBetween,pt=t.getTextContentFromNodes,ct=t.getTextSerializersFromSchema,ut=t.injectExtensionAttributesToParseRule,gt=t.inputRulesPlugin,_t=t.isActive,mt=t.isAtEndOfNode,xt=t.isAtStartOfNode,kt=t.isEmptyObject,bt=t.isExtensionRulesEnabled,yt=t.isFunction,ht=t.isList,Et=t.isMacOS,ft=t.isMarkActive,Rt=t.isNodeActive,Tt=t.isNodeEmpty,Pt=t.isNodeSelection,Ct=t.isNumber,At=t.isPlainObject,St=t.isRegExp,Nt=t.isSafari,wt=t.isString,Ot=t.isTextSelection,Bt=t.isiOS,vt=t.markInputRule,Mt=t.markPasteRule,s=t.mergeAttributes,It=t.mergeDeep,Ft=t.minMax,Dt=t.nodeInputRule,Lt=t.nodePasteRule,jt=t.objectIncludes,Kt=t.pasteRulesPlugin,Ht=t.posToDOMRect,qt=t.removeDuplicates,Gt=t.resolveFocusPosition,zt=t.rewriteUnknownContent,Jt=t.selectionToInsertionEnd,Ut=t.splitExtensions,Vt=t.textInputRule,Yt=t.textPasteRule,$t=t.textblockTypeInputRule,Qt=t.wrappingInputRule;var l=r.create({name:"taskList",addOptions(){return{itemTypeName:"taskItem",HTMLAttributes:{}}},group:"block list",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul[data-type="${this.name}"]`,priority:51}]},renderHTML({HTMLAttributes:e}){return["ul",s(this.options.HTMLAttributes,e,{"data-type":this.name}),0]},addCommands(){return{toggleTaskList:()=>({commands:e})=>e.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}});var a="__LEPTOS_TIPTAP_BRIDGE__";function c(){let e=globalThis,o=e[a];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[a]=i,i}function d(){return c()}function p(e){d().registerExtension(e)}var u={name:"task_list",create:()=>l,commands:{toggle_task_list:e=>e.chain().focus().toggleTaskList().run()},selection_keys:["task_list"],selection_state:e=>({task_list:e.isActive("taskList")})};function re(){p(u)}export{re as register_task_list}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text.js index 5e0de069..a94c1f49 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=n.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var u=t.CommandManager,g=t.Editor,_=t.Extension,x=t.InputRule,m=t.Mark,r=t.Node,k=t.NodePos,b=t.NodeView,y=t.PasteRule,E=t.Tracker,R=t.callOrReturn,h=t.canInsertNode,f=t.combineTransactionSteps,P=t.createChainableState,C=t.createDocument,T=t.createNodeFromContent,S=t.createStyleTag,A=t.defaultBlockAt,N=t.deleteProps,O=t.elementFromString,B=t.escapeForRegEx,w=t.extensions,v=t.findChildren,I=t.findChildrenInRange,M=t.findDuplicates,F=t.findParentNode,D=t.findParentNodeClosestToPos,j=t.fromString,L=t.generateHTML,K=t.generateJSON,q=t.generateText,G=t.getAttributes,H=t.getAttributesFromExtensions,z=t.getChangedRanges,J=t.getDebugJSON,U=t.getExtensionField,V=t.getHTMLFromFragment,Y=t.getMarkAttributes,Q=t.getMarkRange,W=t.getMarkType,X=t.getMarksBetween,Z=t.getNodeAtPosition,$=t.getNodeAttributes,tt=t.getNodeType,et=t.getRenderedAttributes,nt=t.getSchema,ot=t.getSchemaByResolvedExtensions,it=t.getSchemaTypeByName,rt=t.getSchemaTypeNameByName,st=t.getSplittedAttributes,lt=t.getText,at=t.getTextBetween,dt=t.getTextContentFromNodes,pt=t.getTextSerializersFromSchema,ct=t.injectExtensionAttributesToParseRule,ut=t.inputRulesPlugin,gt=t.isActive,_t=t.isAtEndOfNode,xt=t.isAtStartOfNode,mt=t.isEmptyObject,kt=t.isExtensionRulesEnabled,bt=t.isFunction,yt=t.isList,Et=t.isMacOS,Rt=t.isMarkActive,ht=t.isNodeActive,ft=t.isNodeEmpty,Pt=t.isNodeSelection,Ct=t.isNumber,Tt=t.isPlainObject,St=t.isRegExp,At=t.isSafari,Nt=t.isString,Ot=t.isTextSelection,Bt=t.isiOS,wt=t.markInputRule,vt=t.markPasteRule,It=t.mergeAttributes,Mt=t.mergeDeep,Ft=t.minMax,Dt=t.nodeInputRule,jt=t.nodePasteRule,Lt=t.objectIncludes,Kt=t.pasteRulesPlugin,qt=t.posToDOMRect,Gt=t.removeDuplicates,Ht=t.resolveFocusPosition,zt=t.rewriteUnknownContent,Jt=t.selectionToInsertionEnd,Ut=t.splitExtensions,Vt=t.textInputRule,Yt=t.textPasteRule,Qt=t.textblockTypeInputRule,Wt=t.wrappingInputRule;var s=r.create({name:"text",group:"inline"});var l="__LEPTOS_TIPTAP_BRIDGE__";function p(){let e=globalThis,o=e[l];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[l]=i,i}function a(){return p()}function d(e){a().registerExtension(e)}var c={name:"text",create:()=>s};function re(){d(c)}export{re as register_text}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var u=e.CommandManager,g=e.Editor,_=e.Extension,x=e.InputRule,m=e.Mark,r=e.Node,k=e.NodePos,b=e.NodeView,y=e.PasteRule,E=e.Tracker,h=e.callOrReturn,R=e.canInsertNode,f=e.combineTransactionSteps,P=e.createChainableState,C=e.createDocument,T=e.createNodeFromContent,S=e.createStyleTag,A=e.defaultBlockAt,w=e.deleteProps,N=e.elementFromString,O=e.escapeForRegEx,B=e.extensions,v=e.findChildren,I=e.findChildrenInRange,M=e.findDuplicates,F=e.findParentNode,D=e.findParentNodeClosestToPos,j=e.fromString,L=e.generateHTML,K=e.generateJSON,q=e.generateText,G=e.getAttributes,H=e.getAttributesFromExtensions,z=e.getChangedRanges,J=e.getDebugJSON,U=e.getExtensionField,V=e.getHTMLFromFragment,Y=e.getMarkAttributes,Q=e.getMarkRange,W=e.getMarkType,X=e.getMarksBetween,Z=e.getNodeAtPosition,$=e.getNodeAttributes,ee=e.getNodeType,te=e.getRenderedAttributes,ne=e.getSchema,oe=e.getSchemaByResolvedExtensions,ie=e.getSchemaTypeByName,re=e.getSchemaTypeNameByName,se=e.getSplittedAttributes,le=e.getText,ae=e.getTextBetween,de=e.getTextContentFromNodes,pe=e.getTextSerializersFromSchema,ce=e.injectExtensionAttributesToParseRule,ue=e.inputRulesPlugin,ge=e.isActive,_e=e.isAtEndOfNode,xe=e.isAtStartOfNode,me=e.isEmptyObject,ke=e.isExtensionRulesEnabled,be=e.isFunction,ye=e.isList,Ee=e.isMacOS,he=e.isMarkActive,Re=e.isNodeActive,fe=e.isNodeEmpty,Pe=e.isNodeSelection,Ce=e.isNumber,Te=e.isPlainObject,Se=e.isRegExp,Ae=e.isSafari,we=e.isString,Ne=e.isTextSelection,Oe=e.isiOS,Be=e.markInputRule,ve=e.markPasteRule,Ie=e.mergeAttributes,Me=e.mergeDeep,Fe=e.minMax,De=e.nodeInputRule,je=e.nodePasteRule,Le=e.objectIncludes,Ke=e.pasteRulesPlugin,qe=e.posToDOMRect,Ge=e.removeDuplicates,He=e.resolveFocusPosition,ze=e.rewriteUnknownContent,Je=e.selectionToInsertionEnd,Ue=e.splitExtensions,Ve=e.textInputRule,Ye=e.textPasteRule,Qe=e.textblockTypeInputRule,We=e.wrappingInputRule;var s=r.create({name:"text",group:"inline"});var l="__LEPTOS_TIPTAP_BRIDGE__";function p(){let t=globalThis,o=t[l];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[l]=i,i}function a(){return p()}function d(t){a().registerExtension(t)}var c={name:"text",create:()=>s};function rt(){d(c)}export{rt as register_text}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_align.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_align.js index e77db881..276744b0 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_align.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_align.js @@ -1 +1 @@ -var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=i.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var u=t.CommandManager,x=t.Editor,r=t.Extension,_=t.InputRule,m=t.Mark,k=t.Node,b=t.NodePos,y=t.NodeView,f=t.PasteRule,h=t.Tracker,A=t.callOrReturn,E=t.canInsertNode,T=t.combineTransactionSteps,R=t.createChainableState,P=t.createDocument,S=t.createNodeFromContent,C=t.createStyleTag,N=t.defaultBlockAt,O=t.deleteProps,B=t.elementFromString,w=t.escapeForRegEx,v=t.extensions,M=t.findChildren,I=t.findChildrenInRange,j=t.findDuplicates,F=t.findParentNode,D=t.findParentNodeClosestToPos,L=t.fromString,K=t.generateHTML,G=t.generateJSON,H=t.generateText,q=t.getAttributes,z=t.getAttributesFromExtensions,J=t.getChangedRanges,U=t.getDebugJSON,V=t.getExtensionField,Y=t.getHTMLFromFragment,$=t.getMarkAttributes,Q=t.getMarkRange,W=t.getMarkType,X=t.getMarksBetween,Z=t.getNodeAtPosition,tt=t.getNodeAttributes,et=t.getNodeType,nt=t.getRenderedAttributes,ot=t.getSchema,it=t.getSchemaByResolvedExtensions,rt=t.getSchemaTypeByName,st=t.getSchemaTypeNameByName,lt=t.getSplittedAttributes,at=t.getText,dt=t.getTextBetween,pt=t.getTextContentFromNodes,gt=t.getTextSerializersFromSchema,ct=t.injectExtensionAttributesToParseRule,ut=t.inputRulesPlugin,xt=t.isActive,_t=t.isAtEndOfNode,mt=t.isAtStartOfNode,kt=t.isEmptyObject,bt=t.isExtensionRulesEnabled,yt=t.isFunction,ft=t.isList,ht=t.isMacOS,At=t.isMarkActive,Et=t.isNodeActive,Tt=t.isNodeEmpty,Rt=t.isNodeSelection,Pt=t.isNumber,St=t.isPlainObject,Ct=t.isRegExp,Nt=t.isSafari,Ot=t.isString,Bt=t.isTextSelection,wt=t.isiOS,vt=t.markInputRule,Mt=t.markPasteRule,It=t.mergeAttributes,jt=t.mergeDeep,Ft=t.minMax,Dt=t.nodeInputRule,Lt=t.nodePasteRule,Kt=t.objectIncludes,Gt=t.pasteRulesPlugin,Ht=t.posToDOMRect,qt=t.removeDuplicates,zt=t.resolveFocusPosition,Jt=t.rewriteUnknownContent,Ut=t.selectionToInsertionEnd,Vt=t.splitExtensions,Yt=t.textInputRule,$t=t.textPasteRule,Qt=t.textblockTypeInputRule,Wt=t.wrappingInputRule;var s=r.create({name:"textAlign",addOptions(){return{types:[],alignments:["left","center","right","justify"],defaultAlignment:null}},addGlobalAttributes(){return[{types:this.options.types,attributes:{textAlign:{default:this.options.defaultAlignment,parseHTML:e=>{let n=e.style.textAlign;return this.options.alignments.includes(n)?n:this.options.defaultAlignment},renderHTML:e=>e.textAlign?{style:`text-align: ${e.textAlign}`}:{}}}}]},addCommands(){return{setTextAlign:e=>({commands:n})=>this.options.alignments.includes(e)?this.options.types.map(o=>n.updateAttributes(o,{textAlign:e})).every(o=>o):!1,unsetTextAlign:()=>({commands:e})=>this.options.types.map(n=>e.resetAttributes(n,"textAlign")).every(n=>n),toggleTextAlign:e=>({editor:n,commands:o})=>this.options.alignments.includes(e)?n.isActive({textAlign:e})?o.unsetTextAlign():o.setTextAlign(e):!1}},addKeyboardShortcuts(){return{"Mod-Shift-l":()=>this.editor.commands.setTextAlign("left"),"Mod-Shift-e":()=>this.editor.commands.setTextAlign("center"),"Mod-Shift-r":()=>this.editor.commands.setTextAlign("right"),"Mod-Shift-j":()=>this.editor.commands.setTextAlign("justify")}}});var l="__LEPTOS_TIPTAP_BRIDGE__";function g(){let e=globalThis,n=e[l];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[l]=o,o}function a(){return g()}function d(e){a().registerExtension(e)}var p=["left","center","right","justify"],c={name:"text_align",create:()=>s.configure({types:["heading","paragraph"]}),commands:{set_text_align:(e,n)=>n.kind==="set_text_align"&&p.includes(n.alignment)?e.chain().focus().setTextAlign(n.alignment).run():!1,toggle_text_align:(e,n)=>n.kind==="toggle_text_align"&&p.includes(n.alignment)?e.chain().focus().toggleTextAlign(n.alignment).run():!1,unset_text_align:e=>e.chain().focus().unsetTextAlign().run()},selection_keys:["align_left","align_center","align_right","align_justify"],selection_state:e=>({align_left:e.isActive({textAlign:"left"}),align_center:e.isActive({textAlign:"center"}),align_right:e.isActive({textAlign:"right"}),align_justify:e.isActive({textAlign:"justify"})})};function se(){d(c)}export{se as register_text_align}; +var i=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(i==null||i.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=i.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=t.CommandManager,_=t.Editor,r=t.Extension,x=t.InputRule,m=t.Mark,k=t.Node,b=t.NodePos,y=t.NodeView,f=t.PasteRule,h=t.Tracker,A=t.callOrReturn,E=t.canInsertNode,T=t.combineTransactionSteps,R=t.createChainableState,P=t.createDocument,S=t.createNodeFromContent,C=t.createStyleTag,w=t.defaultBlockAt,N=t.deleteProps,O=t.elementFromString,B=t.escapeForRegEx,v=t.extensions,M=t.findChildren,I=t.findChildrenInRange,j=t.findDuplicates,F=t.findParentNode,D=t.findParentNodeClosestToPos,L=t.fromString,K=t.generateHTML,G=t.generateJSON,H=t.generateText,q=t.getAttributes,z=t.getAttributesFromExtensions,J=t.getChangedRanges,U=t.getDebugJSON,V=t.getExtensionField,Y=t.getHTMLFromFragment,$=t.getMarkAttributes,Q=t.getMarkRange,W=t.getMarkType,X=t.getMarksBetween,Z=t.getNodeAtPosition,tt=t.getNodeAttributes,et=t.getNodeType,nt=t.getRenderedAttributes,ot=t.getSchema,it=t.getSchemaByResolvedExtensions,rt=t.getSchemaTypeByName,st=t.getSchemaTypeNameByName,lt=t.getSplittedAttributes,at=t.getText,dt=t.getTextBetween,pt=t.getTextContentFromNodes,ut=t.getTextSerializersFromSchema,ct=t.injectExtensionAttributesToParseRule,gt=t.inputRulesPlugin,_t=t.isActive,xt=t.isAtEndOfNode,mt=t.isAtStartOfNode,kt=t.isEmptyObject,bt=t.isExtensionRulesEnabled,yt=t.isFunction,ft=t.isList,ht=t.isMacOS,At=t.isMarkActive,Et=t.isNodeActive,Tt=t.isNodeEmpty,Rt=t.isNodeSelection,Pt=t.isNumber,St=t.isPlainObject,Ct=t.isRegExp,wt=t.isSafari,Nt=t.isString,Ot=t.isTextSelection,Bt=t.isiOS,vt=t.markInputRule,Mt=t.markPasteRule,It=t.mergeAttributes,jt=t.mergeDeep,Ft=t.minMax,Dt=t.nodeInputRule,Lt=t.nodePasteRule,Kt=t.objectIncludes,Gt=t.pasteRulesPlugin,Ht=t.posToDOMRect,qt=t.removeDuplicates,zt=t.resolveFocusPosition,Jt=t.rewriteUnknownContent,Ut=t.selectionToInsertionEnd,Vt=t.splitExtensions,Yt=t.textInputRule,$t=t.textPasteRule,Qt=t.textblockTypeInputRule,Wt=t.wrappingInputRule;var s=r.create({name:"textAlign",addOptions(){return{types:[],alignments:["left","center","right","justify"],defaultAlignment:null}},addGlobalAttributes(){return[{types:this.options.types,attributes:{textAlign:{default:this.options.defaultAlignment,parseHTML:e=>{let n=e.style.textAlign;return this.options.alignments.includes(n)?n:this.options.defaultAlignment},renderHTML:e=>e.textAlign?{style:`text-align: ${e.textAlign}`}:{}}}}]},addCommands(){return{setTextAlign:e=>({commands:n})=>this.options.alignments.includes(e)?this.options.types.map(o=>n.updateAttributes(o,{textAlign:e})).every(o=>o):!1,unsetTextAlign:()=>({commands:e})=>this.options.types.map(n=>e.resetAttributes(n,"textAlign")).every(n=>n),toggleTextAlign:e=>({editor:n,commands:o})=>this.options.alignments.includes(e)?n.isActive({textAlign:e})?o.unsetTextAlign():o.setTextAlign(e):!1}},addKeyboardShortcuts(){return{"Mod-Shift-l":()=>this.editor.commands.setTextAlign("left"),"Mod-Shift-e":()=>this.editor.commands.setTextAlign("center"),"Mod-Shift-r":()=>this.editor.commands.setTextAlign("right"),"Mod-Shift-j":()=>this.editor.commands.setTextAlign("justify")}}});var l="__LEPTOS_TIPTAP_BRIDGE__";function u(){let e=globalThis,n=e[l];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[l]=o,o}function a(){return u()}function d(e){a().registerExtension(e)}var p=["left","center","right","justify"],c={name:"text_align",create:()=>s.configure({types:["heading","paragraph"]}),commands:{set_text_align:(e,n)=>n.kind==="set_text_align"&&p.includes(n.alignment)?e.chain().focus().setTextAlign(n.alignment).run():!1,toggle_text_align:(e,n)=>n.kind==="toggle_text_align"&&p.includes(n.alignment)?e.chain().focus().toggleTextAlign(n.alignment).run():!1,unset_text_align:e=>e.chain().focus().unsetTextAlign().run()},selection_keys:["align_left","align_center","align_right","align_justify"],selection_state:e=>({align_left:e.isActive({textAlign:"left"}),align_center:e.isActive({textAlign:"center"}),align_right:e.isActive({textAlign:"right"}),align_justify:e.isActive({textAlign:"justify"})})};function se(){d(c)}export{se as register_text_align}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_style.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_style.js index 33385c68..d9b96e85 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_style.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_text_style.js @@ -1 +1 @@ -var l=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(l==null||l.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=l.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var f=t.CommandManager,h=t.Editor,a=t.Extension,E=t.InputRule,d=t.Mark,S=t.Node,R=t.NodePos,C=t.NodeView,T=t.PasteRule,A=t.Tracker,P=t.callOrReturn,N=t.canInsertNode,O=t.combineTransactionSteps,v=t.createChainableState,B=t.createDocument,w=t.createNodeFromContent,M=t.createStyleTag,I=t.defaultBlockAt,F=t.deleteProps,D=t.elementFromString,j=t.escapeForRegEx,L=t.extensions,H=t.findChildren,K=t.findChildrenInRange,q=t.findDuplicates,G=t.findParentNode,z=t.findParentNodeClosestToPos,J=t.fromString,$=t.generateHTML,U=t.generateJSON,V=t.generateText,Y=t.getAttributes,Q=t.getAttributesFromExtensions,W=t.getChangedRanges,X=t.getDebugJSON,Z=t.getExtensionField,tt=t.getHTMLFromFragment,et=t.getMarkAttributes,nt=t.getMarkRange,ot=t.getMarkType,rt=t.getMarksBetween,it=t.getNodeAtPosition,st=t.getNodeAttributes,lt=t.getNodeType,at=t.getRenderedAttributes,dt=t.getSchema,pt=t.getSchemaByResolvedExtensions,ct=t.getSchemaTypeByName,ut=t.getSchemaTypeNameByName,gt=t.getSplittedAttributes,_t=t.getText,xt=t.getTextBetween,mt=t.getTextContentFromNodes,kt=t.getTextSerializersFromSchema,bt=t.injectExtensionAttributesToParseRule,yt=t.inputRulesPlugin,ft=t.isActive,ht=t.isAtEndOfNode,Et=t.isAtStartOfNode,St=t.isEmptyObject,Rt=t.isExtensionRulesEnabled,Ct=t.isFunction,Tt=t.isList,At=t.isMacOS,Pt=t.isMarkActive,Nt=t.isNodeActive,Ot=t.isNodeEmpty,vt=t.isNodeSelection,Bt=t.isNumber,wt=t.isPlainObject,Mt=t.isRegExp,It=t.isSafari,Ft=t.isString,Dt=t.isTextSelection,jt=t.isiOS,Lt=t.markInputRule,Ht=t.markPasteRule,p=t.mergeAttributes,Kt=t.mergeDeep,qt=t.minMax,Gt=t.nodeInputRule,zt=t.nodePasteRule,Jt=t.objectIncludes,$t=t.pasteRulesPlugin,Ut=t.posToDOMRect,Vt=t.removeDuplicates,Yt=t.resolveFocusPosition,Qt=t.rewriteUnknownContent,Wt=t.selectionToInsertionEnd,Xt=t.splitExtensions,Zt=t.textInputRule,te=t.textPasteRule,ee=t.textblockTypeInputRule,ne=t.wrappingInputRule;var k=e=>{if(!e.children.length)return;let n=e.querySelectorAll("span");n&&n.forEach(o=>{var i,r;let s=o.getAttribute("style"),m=(r=(i=o.parentElement)===null||i===void 0?void 0:i.closest("span"))===null||r===void 0?void 0:r.getAttribute("style");o.setAttribute("style",`${m};${s}`)})},c=d.create({name:"textStyle",priority:101,addOptions(){return{HTMLAttributes:{},mergeNestedSpanStyles:!1}},parseHTML(){return[{tag:"span",getAttrs:e=>e.hasAttribute("style")?(this.options.mergeNestedSpanStyles&&k(e),{}):!1}]},renderHTML({HTMLAttributes:e}){return["span",p(this.options.HTMLAttributes,e),0]},addCommands(){return{removeEmptyTextStyle:()=>({tr:e})=>{let{selection:n}=e;return e.doc.nodesBetween(n.from,n.to,(o,i)=>{if(o.isTextblock)return!0;o.marks.filter(r=>r.type===this.type).some(r=>Object.values(r.attrs).some(s=>!!s))||e.removeMark(i,i+o.nodeSize,this.type)}),!0}}}});var u=a.create({name:"color",addOptions(){return{types:["textStyle"]}},addGlobalAttributes(){return[{types:this.options.types,attributes:{color:{default:null,parseHTML:e=>{var n;return(n=e.style.color)===null||n===void 0?void 0:n.replace(/['"]+/g,"")},renderHTML:e=>e.color?{style:`color: ${e.color}`}:{}}}}]},addCommands(){return{setColor:e=>({chain:n})=>n().setMark("textStyle",{color:e}).run(),unsetColor:()=>({chain:e})=>e().setMark("textStyle",{color:null}).removeEmptyTextStyle().run()}}});var g="__LEPTOS_TIPTAP_BRIDGE__";function b(){let e=globalThis,n=e[g];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[g]=o,o}function _(){return b()}function x(e){_().registerExtension(e)}var y={name:"text_style",create:()=>[c,u],commands:{set_color:(e,n)=>n.kind==="set_color"?e.chain().focus().setColor(n.attributes.color).run():!1,unset_color:e=>e.chain().focus().unsetColor().run()},selection_keys:["text_style"],selection_state:e=>({text_style:e.isActive("textStyle")})};function xe(){x(y)}export{xe as register_text_style}; +var l=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(l==null||l.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=l.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var f=t.CommandManager,h=t.Editor,a=t.Extension,E=t.InputRule,d=t.Mark,S=t.Node,R=t.NodePos,C=t.NodeView,T=t.PasteRule,A=t.Tracker,P=t.callOrReturn,w=t.canInsertNode,N=t.combineTransactionSteps,O=t.createChainableState,v=t.createDocument,B=t.createNodeFromContent,M=t.createStyleTag,I=t.defaultBlockAt,F=t.deleteProps,D=t.elementFromString,j=t.escapeForRegEx,L=t.extensions,H=t.findChildren,K=t.findChildrenInRange,q=t.findDuplicates,G=t.findParentNode,z=t.findParentNodeClosestToPos,J=t.fromString,$=t.generateHTML,U=t.generateJSON,V=t.generateText,Y=t.getAttributes,Q=t.getAttributesFromExtensions,W=t.getChangedRanges,X=t.getDebugJSON,Z=t.getExtensionField,tt=t.getHTMLFromFragment,et=t.getMarkAttributes,nt=t.getMarkRange,ot=t.getMarkType,rt=t.getMarksBetween,it=t.getNodeAtPosition,st=t.getNodeAttributes,lt=t.getNodeType,at=t.getRenderedAttributes,dt=t.getSchema,pt=t.getSchemaByResolvedExtensions,ct=t.getSchemaTypeByName,ut=t.getSchemaTypeNameByName,gt=t.getSplittedAttributes,_t=t.getText,xt=t.getTextBetween,mt=t.getTextContentFromNodes,kt=t.getTextSerializersFromSchema,bt=t.injectExtensionAttributesToParseRule,yt=t.inputRulesPlugin,ft=t.isActive,ht=t.isAtEndOfNode,Et=t.isAtStartOfNode,St=t.isEmptyObject,Rt=t.isExtensionRulesEnabled,Ct=t.isFunction,Tt=t.isList,At=t.isMacOS,Pt=t.isMarkActive,wt=t.isNodeActive,Nt=t.isNodeEmpty,Ot=t.isNodeSelection,vt=t.isNumber,Bt=t.isPlainObject,Mt=t.isRegExp,It=t.isSafari,Ft=t.isString,Dt=t.isTextSelection,jt=t.isiOS,Lt=t.markInputRule,Ht=t.markPasteRule,p=t.mergeAttributes,Kt=t.mergeDeep,qt=t.minMax,Gt=t.nodeInputRule,zt=t.nodePasteRule,Jt=t.objectIncludes,$t=t.pasteRulesPlugin,Ut=t.posToDOMRect,Vt=t.removeDuplicates,Yt=t.resolveFocusPosition,Qt=t.rewriteUnknownContent,Wt=t.selectionToInsertionEnd,Xt=t.splitExtensions,Zt=t.textInputRule,te=t.textPasteRule,ee=t.textblockTypeInputRule,ne=t.wrappingInputRule;var k=e=>{if(!e.children.length)return;let n=e.querySelectorAll("span");n&&n.forEach(o=>{var i,r;let s=o.getAttribute("style"),m=(r=(i=o.parentElement)===null||i===void 0?void 0:i.closest("span"))===null||r===void 0?void 0:r.getAttribute("style");o.setAttribute("style",`${m};${s}`)})},c=d.create({name:"textStyle",priority:101,addOptions(){return{HTMLAttributes:{},mergeNestedSpanStyles:!1}},parseHTML(){return[{tag:"span",getAttrs:e=>e.hasAttribute("style")?(this.options.mergeNestedSpanStyles&&k(e),{}):!1}]},renderHTML({HTMLAttributes:e}){return["span",p(this.options.HTMLAttributes,e),0]},addCommands(){return{removeEmptyTextStyle:()=>({tr:e})=>{let{selection:n}=e;return e.doc.nodesBetween(n.from,n.to,(o,i)=>{if(o.isTextblock)return!0;o.marks.filter(r=>r.type===this.type).some(r=>Object.values(r.attrs).some(s=>!!s))||e.removeMark(i,i+o.nodeSize,this.type)}),!0}}}});var u=a.create({name:"color",addOptions(){return{types:["textStyle"]}},addGlobalAttributes(){return[{types:this.options.types,attributes:{color:{default:null,parseHTML:e=>{var n;return(n=e.style.color)===null||n===void 0?void 0:n.replace(/['"]+/g,"")},renderHTML:e=>e.color?{style:`color: ${e.color}`}:{}}}}]},addCommands(){return{setColor:e=>({chain:n})=>n().setMark("textStyle",{color:e}).run(),unsetColor:()=>({chain:e})=>e().setMark("textStyle",{color:null}).removeEmptyTextStyle().run()}}});var g="__LEPTOS_TIPTAP_BRIDGE__";function b(){let e=globalThis,n=e[g];if(n!=null)return n;let o={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[g]=o,o}function _(){return b()}function x(e){_().registerExtension(e)}var y={name:"text_style",create:()=>[c,u],commands:{set_color:(e,n)=>n.kind==="set_color"?e.chain().focus().setColor(n.attributes.color).run():!1,unset_color:e=>e.chain().focus().unsetColor().run()},selection_keys:["text_style"],selection_state:e=>({text_style:e.isActive("textStyle")})};function xe(){x(y)}export{xe as register_text_style}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_toc_node.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_toc_node.js new file mode 100644 index 00000000..c9870676 --- /dev/null +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_toc_node.js @@ -0,0 +1 @@ +var b=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(b==null||b.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=b.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var F=t.CommandManager,I=t.Editor,D=t.Extension,H=t.InputRule,j=t.Mark,E=t.Node,K=t.NodePos,q=t.NodeView,G=t.PasteRule,z=t.Tracker,V=t.callOrReturn,J=t.canInsertNode,U=t.combineTransactionSteps,Y=t.createChainableState,$=t.createDocument,Q=t.createNodeFromContent,W=t.createStyleTag,X=t.defaultBlockAt,Z=t.deleteProps,tt=t.elementFromString,et=t.escapeForRegEx,nt=t.extensions,ot=t.findChildren,rt=t.findChildrenInRange,it=t.findDuplicates,st=t.findParentNode,at=t.findParentNodeClosestToPos,lt=t.fromString,dt=t.generateHTML,pt=t.generateJSON,ct=t.generateText,ut=t.getAttributes,gt=t.getAttributesFromExtensions,mt=t.getChangedRanges,_t=t.getDebugJSON,xt=t.getExtensionField,bt=t.getHTMLFromFragment,kt=t.getMarkAttributes,ft=t.getMarkRange,yt=t.getMarkType,ht=t.getMarksBetween,Tt=t.getNodeAtPosition,Et=t.getNodeAttributes,wt=t.getNodeType,At=t.getRenderedAttributes,Ct=t.getSchema,St=t.getSchemaByResolvedExtensions,Pt=t.getSchemaTypeByName,Rt=t.getSchemaTypeNameByName,Nt=t.getSplittedAttributes,vt=t.getText,Ot=t.getTextBetween,Mt=t.getTextContentFromNodes,Bt=t.getTextSerializersFromSchema,Lt=t.injectExtensionAttributesToParseRule,Ft=t.inputRulesPlugin,It=t.isActive,Dt=t.isAtEndOfNode,Ht=t.isAtStartOfNode,jt=t.isEmptyObject,Kt=t.isExtensionRulesEnabled,qt=t.isFunction,Gt=t.isList,zt=t.isMacOS,Vt=t.isMarkActive,Jt=t.isNodeActive,Ut=t.isNodeEmpty,Yt=t.isNodeSelection,$t=t.isNumber,Qt=t.isPlainObject,Wt=t.isRegExp,Xt=t.isSafari,Zt=t.isString,te=t.isTextSelection,ee=t.isiOS,ne=t.markInputRule,oe=t.markPasteRule,w=t.mergeAttributes,re=t.mergeDeep,ie=t.minMax,se=t.nodeInputRule,ae=t.nodePasteRule,le=t.objectIncludes,de=t.pasteRulesPlugin,pe=t.posToDOMRect,ce=t.removeDuplicates,ue=t.resolveFocusPosition,ge=t.rewriteUnknownContent,me=t.selectionToInsertionEnd,_e=t.splitExtensions,xe=t.textInputRule,be=t.textPasteRule,ke=t.textblockTypeInputRule,fe=t.wrappingInputRule;var A="__LEPTOS_TIPTAP_BRIDGE__";function P(){let e=globalThis,n=e[A];if(n!=null)return n;let a={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[A]=a,a}function C(){return P()}function S(e){C().registerExtension(e)}function m(e){let n=typeof e=="number"?e:Number(e);return Number.isFinite(n)?n:null}function R(e){let n="";return e.descendants(a=>(a.isText&&a.text&&(n+=a.text),!0)),n.trim()}function N(e){if(!e.length)return[];let n=e.map(l=>l.level||1),a=n.filter(l=>l>0),c=a.includes(1)?1:Math.min(...a),i=n.map(l=>Math.max(1,l-(c-1))),s=[],o=[];for(let l of i){for(;o.length>0&&o[o.length-1].level>=l;)o.pop();let u=o.length===0?1:o[o.length-1].depth+1;s.push(u),o.push({level:l,depth:u})}return s}function v(e,n){let a=[];e.state.doc.descendants((s,o)=>{if(s.type.name!=="heading")return!0;let l=R(s);if(!l)return!1;let u=m(s.attrs.level)??1;return a.push({id:`heading-${o}`,pos:o,level:u,depth:1,text:l}),!1});let c=a.slice(0,n),i=N(c);return c.map((s,o)=>({...s,depth:i[o]??1}))}function O(e){return{topOffset:e.top_offset??null,maxShowCount:e.max_show_count??null,showTitle:e.show_title??!0}}function M(e){return({node:n,getPos:a})=>{let c=n,i=document.createElement("div");i.className="tiptap-table-of-contents-node",i.dataset.type="toc-node",i.dataset.testid="toc-node";let s=()=>{let o=c.attrs,l=m(o.maxShowCount)??20,u=m(o.topOffset)??0,g=o.showTitle!==!1,k=v(e,l);i.setAttribute("data-show-title",String(g)),i.setAttribute("data-max-show-count",String(l)),i.setAttribute("data-top-offset",String(u)),i.replaceChildren();let _=document.createElement("div");if(_.className="tiptap-table-of-contents-title-row",g){let r=document.createElement("div");r.className="tiptap-table-of-contents-title",r.textContent="\u9875\u9762\u76EE\u5F55",_.append(r)}let p=document.createElement("button");p.type="button",p.className="tiptap-table-of-contents-title-toggle",p.dataset.testid="toc-show-title-toggle",p.setAttribute("aria-pressed",String(g)),p.setAttribute("aria-label",g?"\u9690\u85CF\u76EE\u5F55\u6807\u9898":"\u663E\u793A\u76EE\u5F55\u6807\u9898"),p.textContent="T";let f=r=>{r.preventDefault(),r.stopPropagation();let d=a();typeof d=="number"&&e.chain().focus().setNodeSelection(d).updateAttributes("tocNode",{showTitle:!g}).run()};if(p.addEventListener("pointerdown",f,{capture:!0}),p.addEventListener("click",f,{capture:!0}),_.append(p),i.append(_),!k.length){let r=document.createElement("div");r.className="tiptap-table-of-contents-empty",r.textContent="\u6DFB\u52A0\u6807\u9898\u540E\u751F\u6210\u76EE\u5F55",i.append(r);return}let x=document.createElement("nav");x.className="tiptap-table-of-contents-list",x.setAttribute("aria-label","\u9875\u9762\u76EE\u5F55");for(let r of k){let d=document.createElement("a");d.href=`#${r.id}`,d.className="tiptap-table-of-contents-item",d.dataset.testid="toc-heading-item",d.dataset.depth=String(r.depth),d.dataset.headingPos=String(r.pos),d.textContent=r.text;let y=h=>{h.preventDefault(),h.stopPropagation(),e.chain().focus().setTextSelection(Math.min(r.pos+1,e.state.doc.content.size)).scrollIntoView().run();let T=new URL(window.location.href);T.hash=r.id,window.history.replaceState(null,"",T.toString())};d.addEventListener("pointerdown",y,{capture:!0}),d.addEventListener("click",y,{capture:!0}),x.append(d)}i.append(x)};return s(),e.on("update",s),e.on("transaction",s),{dom:i,update:o=>o.type.name!==c.type.name?!1:(c=o,s(),!0),ignoreMutation:()=>!0,stopEvent:o=>o.target instanceof HTMLElement&&!!o.target.closest(".tiptap-table-of-contents-node"),destroy:()=>{e.off("update",s),e.off("transaction",s)}}}}var B=E.create({name:"tocNode",group:"block customNode",draggable:!0,selectable:!0,atom:!0,addOptions(){return{topOffset:0,maxShowCount:20,showTitle:!0,HTMLAttributes:{}}},addAttributes(){return{topOffset:{default:null,parseHTML:e=>m(e.getAttribute("data-top-offset")),renderHTML:e=>e.topOffset==null?{}:{"data-top-offset":e.topOffset}},maxShowCount:{default:null,parseHTML:e=>m(e.getAttribute("data-max-show-count")),renderHTML:e=>e.maxShowCount==null?{}:{"data-max-show-count":e.maxShowCount}},showTitle:{default:!0,parseHTML:e=>{let n=e.getAttribute("data-show-title");return n==="false"?!1:n==="true"?!0:null},renderHTML:e=>e.showTitle==null?{}:{"data-show-title":String(e.showTitle)}}}},parseHTML(){return[{tag:'div[data-type="toc-node"]'}]},renderHTML({HTMLAttributes:e}){return["div",w(this.options.HTMLAttributes,e,{"data-type":"toc-node"})]},addNodeView(){return M(this.editor)},addCommands(){return{insertTocNode:e=>({commands:n})=>n.insertContent({type:this.name,attrs:e})}}}),L={name:"toc_node",create:()=>B,commands:{insert_toc_node:(e,n)=>n.kind==="insert_toc_node"?e.chain().focus().insertTocNode(O(n)).run():!1}};function Ce(){S(L)}export{Ce as register_toc_node}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_underline.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_underline.js index 4b6c1e5f..faa4e9bf 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_underline.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_underline.js @@ -1 +1 @@ -var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=e.CommandManager,_=e.Editor,x=e.Extension,m=e.InputRule,r=e.Mark,k=e.Node,b=e.NodePos,y=e.NodeView,E=e.PasteRule,h=e.Tracker,R=e.callOrReturn,f=e.canInsertNode,P=e.combineTransactionSteps,C=e.createChainableState,T=e.createDocument,A=e.createNodeFromContent,S=e.createStyleTag,N=e.defaultBlockAt,O=e.deleteProps,B=e.elementFromString,w=e.escapeForRegEx,M=e.extensions,v=e.findChildren,I=e.findChildrenInRange,F=e.findDuplicates,D=e.findParentNode,j=e.findParentNodeClosestToPos,L=e.fromString,K=e.generateHTML,H=e.generateJSON,U=e.generateText,q=e.getAttributes,G=e.getAttributesFromExtensions,z=e.getChangedRanges,J=e.getDebugJSON,V=e.getExtensionField,Y=e.getHTMLFromFragment,Q=e.getMarkAttributes,W=e.getMarkRange,X=e.getMarkType,Z=e.getMarksBetween,$=e.getNodeAtPosition,ee=e.getNodeAttributes,te=e.getNodeType,ne=e.getRenderedAttributes,oe=e.getSchema,ie=e.getSchemaByResolvedExtensions,re=e.getSchemaTypeByName,se=e.getSchemaTypeNameByName,le=e.getSplittedAttributes,ae=e.getText,de=e.getTextBetween,pe=e.getTextContentFromNodes,ce=e.getTextSerializersFromSchema,ue=e.injectExtensionAttributesToParseRule,ge=e.inputRulesPlugin,_e=e.isActive,xe=e.isAtEndOfNode,me=e.isAtStartOfNode,ke=e.isEmptyObject,be=e.isExtensionRulesEnabled,ye=e.isFunction,Ee=e.isList,he=e.isMacOS,Re=e.isMarkActive,fe=e.isNodeActive,Pe=e.isNodeEmpty,Ce=e.isNodeSelection,Te=e.isNumber,Ae=e.isPlainObject,Se=e.isRegExp,Ne=e.isSafari,Oe=e.isString,Be=e.isTextSelection,we=e.isiOS,Me=e.markInputRule,ve=e.markPasteRule,s=e.mergeAttributes,Ie=e.mergeDeep,Fe=e.minMax,De=e.nodeInputRule,je=e.nodePasteRule,Le=e.objectIncludes,Ke=e.pasteRulesPlugin,He=e.posToDOMRect,Ue=e.removeDuplicates,qe=e.resolveFocusPosition,Ge=e.rewriteUnknownContent,ze=e.selectionToInsertionEnd,Je=e.splitExtensions,Ve=e.textInputRule,Ye=e.textPasteRule,Qe=e.textblockTypeInputRule,We=e.wrappingInputRule;var l=r.create({name:"underline",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"u"},{style:"text-decoration",consuming:!1,getAttrs:t=>t.includes("underline")?{}:!1}]},renderHTML({HTMLAttributes:t}){return["u",s(this.options.HTMLAttributes,t),0]},addCommands(){return{setUnderline:()=>({commands:t})=>t.setMark(this.name),toggleUnderline:()=>({commands:t})=>t.toggleMark(this.name),unsetUnderline:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-u":()=>this.editor.commands.toggleUnderline(),"Mod-U":()=>this.editor.commands.toggleUnderline()}}});var a="__LEPTOS_TIPTAP_BRIDGE__";function c(){let t=globalThis,o=t[a];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[a]=i,i}function d(){return c()}function p(t){d().registerExtension(t)}var u={name:"underline",create:()=>l,selection_keys:["underline"],selection_state:t=>({underline:t.isActive("underline")})};function rt(){p(u)}export{rt as register_underline}; +var n=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(n==null||n.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=n.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var g=e.CommandManager,_=e.Editor,x=e.Extension,m=e.InputRule,r=e.Mark,k=e.Node,b=e.NodePos,y=e.NodeView,h=e.PasteRule,E=e.Tracker,f=e.callOrReturn,R=e.canInsertNode,P=e.combineTransactionSteps,C=e.createChainableState,T=e.createDocument,A=e.createNodeFromContent,S=e.createStyleTag,w=e.defaultBlockAt,N=e.deleteProps,O=e.elementFromString,B=e.escapeForRegEx,M=e.extensions,v=e.findChildren,I=e.findChildrenInRange,F=e.findDuplicates,D=e.findParentNode,j=e.findParentNodeClosestToPos,L=e.fromString,K=e.generateHTML,H=e.generateJSON,U=e.generateText,q=e.getAttributes,G=e.getAttributesFromExtensions,z=e.getChangedRanges,J=e.getDebugJSON,V=e.getExtensionField,Y=e.getHTMLFromFragment,Q=e.getMarkAttributes,W=e.getMarkRange,X=e.getMarkType,Z=e.getMarksBetween,$=e.getNodeAtPosition,ee=e.getNodeAttributes,te=e.getNodeType,ne=e.getRenderedAttributes,oe=e.getSchema,ie=e.getSchemaByResolvedExtensions,re=e.getSchemaTypeByName,se=e.getSchemaTypeNameByName,le=e.getSplittedAttributes,ae=e.getText,de=e.getTextBetween,pe=e.getTextContentFromNodes,ue=e.getTextSerializersFromSchema,ce=e.injectExtensionAttributesToParseRule,ge=e.inputRulesPlugin,_e=e.isActive,xe=e.isAtEndOfNode,me=e.isAtStartOfNode,ke=e.isEmptyObject,be=e.isExtensionRulesEnabled,ye=e.isFunction,he=e.isList,Ee=e.isMacOS,fe=e.isMarkActive,Re=e.isNodeActive,Pe=e.isNodeEmpty,Ce=e.isNodeSelection,Te=e.isNumber,Ae=e.isPlainObject,Se=e.isRegExp,we=e.isSafari,Ne=e.isString,Oe=e.isTextSelection,Be=e.isiOS,Me=e.markInputRule,ve=e.markPasteRule,s=e.mergeAttributes,Ie=e.mergeDeep,Fe=e.minMax,De=e.nodeInputRule,je=e.nodePasteRule,Le=e.objectIncludes,Ke=e.pasteRulesPlugin,He=e.posToDOMRect,Ue=e.removeDuplicates,qe=e.resolveFocusPosition,Ge=e.rewriteUnknownContent,ze=e.selectionToInsertionEnd,Je=e.splitExtensions,Ve=e.textInputRule,Ye=e.textPasteRule,Qe=e.textblockTypeInputRule,We=e.wrappingInputRule;var l=r.create({name:"underline",addOptions(){return{HTMLAttributes:{}}},parseHTML(){return[{tag:"u"},{style:"text-decoration",consuming:!1,getAttrs:t=>t.includes("underline")?{}:!1}]},renderHTML({HTMLAttributes:t}){return["u",s(this.options.HTMLAttributes,t),0]},addCommands(){return{setUnderline:()=>({commands:t})=>t.setMark(this.name),toggleUnderline:()=>({commands:t})=>t.toggleMark(this.name),unsetUnderline:()=>({commands:t})=>t.unsetMark(this.name)}},addKeyboardShortcuts(){return{"Mod-u":()=>this.editor.commands.toggleUnderline(),"Mod-U":()=>this.editor.commands.toggleUnderline()}}});var a="__LEPTOS_TIPTAP_BRIDGE__";function u(){let t=globalThis,o=t[a];if(o!=null)return o;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[a]=i,i}function d(){return u()}function p(t){d().registerExtension(t)}var c={name:"underline",create:()=>l,selection_keys:["underline"],selection_state:t=>({underline:t.isActive("underline")})};function rt(){p(c)}export{rt as register_underline}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_youtube.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_youtube.js index 56b8ed3a..779563e5 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_youtube.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_youtube.js @@ -1 +1 @@ -var s=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(s==null||s.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var t=s.modules["@tiptap/core"];if(t==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var G=t.CommandManager,H=t.Editor,q=t.Extension,V=t.InputRule,z=t.Mark,x=t.Node,J=t.NodePos,$=t.NodeView,X=t.PasteRule,Q=t.Tracker,W=t.callOrReturn,Z=t.canInsertNode,tt=t.combineTransactionSteps,et=t.createChainableState,nt=t.createDocument,ot=t.createNodeFromContent,it=t.createStyleTag,rt=t.defaultBlockAt,st=t.deleteProps,at=t.elementFromString,lt=t.escapeForRegEx,dt=t.extensions,pt=t.findChildren,ct=t.findChildrenInRange,ut=t.findDuplicates,gt=t.findParentNode,mt=t.findParentNodeClosestToPos,_t=t.fromString,bt=t.generateHTML,xt=t.generateJSON,kt=t.generateText,ht=t.getAttributes,yt=t.getAttributesFromExtensions,ft=t.getChangedRanges,Pt=t.getDebugJSON,Et=t.getExtensionField,Rt=t.getHTMLFromFragment,wt=t.getMarkAttributes,At=t.getMarkRange,Ct=t.getMarkType,Tt=t.getMarksBetween,St=t.getNodeAtPosition,Bt=t.getNodeAttributes,vt=t.getNodeType,Ot=t.getRenderedAttributes,Nt=t.getSchema,Lt=t.getSchemaByResolvedExtensions,Ft=t.getSchemaTypeByName,It=t.getSchemaTypeNameByName,Mt=t.getSplittedAttributes,Dt=t.getText,jt=t.getTextBetween,Kt=t.getTextContentFromNodes,Ut=t.getTextSerializersFromSchema,Yt=t.injectExtensionAttributesToParseRule,Gt=t.inputRulesPlugin,Ht=t.isActive,qt=t.isAtEndOfNode,Vt=t.isAtStartOfNode,zt=t.isEmptyObject,Jt=t.isExtensionRulesEnabled,$t=t.isFunction,Xt=t.isList,Qt=t.isMacOS,Wt=t.isMarkActive,Zt=t.isNodeActive,te=t.isNodeEmpty,ee=t.isNodeSelection,ne=t.isNumber,oe=t.isPlainObject,ie=t.isRegExp,re=t.isSafari,se=t.isString,ae=t.isTextSelection,le=t.isiOS,de=t.markInputRule,pe=t.markPasteRule,k=t.mergeAttributes,ce=t.mergeDeep,ue=t.minMax,ge=t.nodeInputRule,h=t.nodePasteRule,me=t.objectIncludes,_e=t.pasteRulesPlugin,be=t.posToDOMRect,xe=t.removeDuplicates,ke=t.resolveFocusPosition,he=t.rewriteUnknownContent,ye=t.selectionToInsertionEnd,fe=t.splitExtensions,Pe=t.textInputRule,Ee=t.textPasteRule,Re=t.textblockTypeInputRule,we=t.wrappingInputRule;var F=/^((?:https?:)?\/\/)?((?:www|m|music)\.)?((?:youtube\.com|youtu\.be|youtube-nocookie\.com))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/,I=/^((?:https?:)?\/\/)?((?:www|m|music)\.)?((?:youtube\.com|youtu\.be|youtube-nocookie\.com))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/g,y=e=>e.match(F),M=(e,n)=>n?"https://www.youtube-nocookie.com/embed/videoseries?list=":e?"https://www.youtube-nocookie.com/embed/":"https://www.youtube.com/embed/",D=e=>e.searchParams.has("v")?{id:e.searchParams.get("v")}:e.hostname==="youtu.be"||e.pathname.includes("shorts")||e.pathname.includes("live")?{id:e.pathname.split("/").pop()}:e.searchParams.has("list")?{id:e.searchParams.get("list"),isPlaylist:!0}:null,j=e=>{var n;let{url:i,allowFullscreen:w,autoplay:A,ccLanguage:a,ccLoadPolicy:C,controls:T,disableKBcontrols:S,enableIFrameApi:B,endTime:l,interfaceLanguage:d,ivLoadPolicy:p,loop:v,modestBranding:O,nocookie:N,origin:c,playlist:u,progressBarColor:g,startAt:m,rel:_}=e;if(!y(i))return null;if(i.includes("/embed/"))return i;let r=new URL(i),{id:b,isPlaylist:L}=(n=D(r))!==null&&n!==void 0?n:{};if(!b)return null;let o=new URL(`${M(N,L)}${b}`);return r.searchParams.has("t")&&o.searchParams.set("start",r.searchParams.get("t").replaceAll("s","")),w===!1&&o.searchParams.set("fs","0"),A&&o.searchParams.set("autoplay","1"),a&&o.searchParams.set("cc_lang_pref",a),C&&o.searchParams.set("cc_load_policy","1"),T||o.searchParams.set("controls","0"),S&&o.searchParams.set("disablekb","1"),B&&o.searchParams.set("enablejsapi","1"),l&&o.searchParams.set("end",l.toString()),d&&o.searchParams.set("hl",d),p&&o.searchParams.set("iv_load_policy",p.toString()),v&&o.searchParams.set("loop","1"),O&&o.searchParams.set("modestbranding","1"),c&&o.searchParams.set("origin",c),u&&o.searchParams.set("playlist",u),m&&o.searchParams.set("start",m.toString()),g&&o.searchParams.set("color",g),_!==void 0&&o.searchParams.set("rel",_.toString()),o.toString()},f=x.create({name:"youtube",addOptions(){return{addPasteHandler:!0,allowFullscreen:!0,autoplay:!1,ccLanguage:void 0,ccLoadPolicy:void 0,controls:!0,disableKBcontrols:!1,enableIFrameApi:!1,endTime:0,height:480,interfaceLanguage:void 0,ivLoadPolicy:0,loop:!1,modestBranding:!1,HTMLAttributes:{},inline:!1,nocookie:!1,origin:"",playlist:"",progressBarColor:void 0,width:640,rel:1}},inline(){return this.options.inline},group(){return this.options.inline?"inline":"block"},draggable:!0,addAttributes(){return{src:{default:null},start:{default:0},width:{default:this.options.width},height:{default:this.options.height}}},parseHTML(){return[{tag:"div[data-youtube-video] iframe"}]},addCommands(){return{setYoutubeVideo:e=>({commands:n})=>y(e.src)?n.insertContent({type:this.name,attrs:e}):!1}},addPasteRules(){return this.options.addPasteHandler?[h({find:I,type:this.type,getAttributes:e=>({src:e.input})})]:[]},renderHTML({HTMLAttributes:e}){let n=j({url:e.src,allowFullscreen:this.options.allowFullscreen,autoplay:this.options.autoplay,ccLanguage:this.options.ccLanguage,ccLoadPolicy:this.options.ccLoadPolicy,controls:this.options.controls,disableKBcontrols:this.options.disableKBcontrols,enableIFrameApi:this.options.enableIFrameApi,endTime:this.options.endTime,interfaceLanguage:this.options.interfaceLanguage,ivLoadPolicy:this.options.ivLoadPolicy,loop:this.options.loop,modestBranding:this.options.modestBranding,nocookie:this.options.nocookie,origin:this.options.origin,playlist:this.options.playlist,progressBarColor:this.options.progressBarColor,startAt:e.start||0,rel:this.options.rel});return e.src=n,["div",{"data-youtube-video":""},["iframe",k(this.options.HTMLAttributes,{width:this.options.width,height:this.options.height,allowfullscreen:this.options.allowFullscreen,autoplay:this.options.autoplay,ccLanguage:this.options.ccLanguage,ccLoadPolicy:this.options.ccLoadPolicy,disableKBcontrols:this.options.disableKBcontrols,enableIFrameApi:this.options.enableIFrameApi,endTime:this.options.endTime,interfaceLanguage:this.options.interfaceLanguage,ivLoadPolicy:this.options.ivLoadPolicy,loop:this.options.loop,modestBranding:this.options.modestBranding,origin:this.options.origin,playlist:this.options.playlist,progressBarColor:this.options.progressBarColor,rel:this.options.rel},e)]]}});var P="__LEPTOS_TIPTAP_BRIDGE__";function K(){let e=globalThis,n=e[P];if(n!=null)return n;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return e[P]=i,i}function E(){return K()}function R(e){E().registerExtension(e)}function U(e){let n={src:e.src};return e.start!=null&&(n.start=e.start),e.width!=null&&(n.width=e.width),e.height!=null&&(n.height=e.height),n}var Y={name:"youtube",create:()=>f,commands:{set_youtube_video:(e,n)=>n.kind==="set_youtube_video"?e.chain().focus().setYoutubeVideo(U(n)).run():!1},selection_keys:["youtube"],selection_state:e=>({youtube:e.isActive("youtube")})};function Le(){R(Y)}export{Le as register_youtube}; +var s=globalThis.__LEPTOS_TIPTAP_BRIDGE__;if(s==null||s.modules==null)throw new Error("leptos-tiptap bridge bindings are unavailable");var e=s.modules["@tiptap/core"];if(e==null)throw new Error('leptos-tiptap bridge module "@tiptap/core" is unavailable');var G=e.CommandManager,H=e.Editor,q=e.Extension,V=e.InputRule,z=e.Mark,x=e.Node,J=e.NodePos,$=e.NodeView,X=e.PasteRule,Q=e.Tracker,W=e.callOrReturn,Z=e.canInsertNode,ee=e.combineTransactionSteps,te=e.createChainableState,ne=e.createDocument,oe=e.createNodeFromContent,ie=e.createStyleTag,re=e.defaultBlockAt,se=e.deleteProps,ae=e.elementFromString,le=e.escapeForRegEx,de=e.extensions,pe=e.findChildren,ue=e.findChildrenInRange,ce=e.findDuplicates,ge=e.findParentNode,me=e.findParentNodeClosestToPos,_e=e.fromString,be=e.generateHTML,xe=e.generateJSON,ke=e.generateText,he=e.getAttributes,ye=e.getAttributesFromExtensions,fe=e.getChangedRanges,Pe=e.getDebugJSON,we=e.getExtensionField,Ee=e.getHTMLFromFragment,Re=e.getMarkAttributes,Ae=e.getMarkRange,Ce=e.getMarkType,Te=e.getMarksBetween,Se=e.getNodeAtPosition,Be=e.getNodeAttributes,ve=e.getNodeType,Oe=e.getRenderedAttributes,Ne=e.getSchema,Le=e.getSchemaByResolvedExtensions,Fe=e.getSchemaTypeByName,Ie=e.getSchemaTypeNameByName,Me=e.getSplittedAttributes,De=e.getText,je=e.getTextBetween,Ke=e.getTextContentFromNodes,Ue=e.getTextSerializersFromSchema,Ye=e.injectExtensionAttributesToParseRule,Ge=e.inputRulesPlugin,He=e.isActive,qe=e.isAtEndOfNode,Ve=e.isAtStartOfNode,ze=e.isEmptyObject,Je=e.isExtensionRulesEnabled,$e=e.isFunction,Xe=e.isList,Qe=e.isMacOS,We=e.isMarkActive,Ze=e.isNodeActive,et=e.isNodeEmpty,tt=e.isNodeSelection,nt=e.isNumber,ot=e.isPlainObject,it=e.isRegExp,rt=e.isSafari,st=e.isString,at=e.isTextSelection,lt=e.isiOS,dt=e.markInputRule,pt=e.markPasteRule,k=e.mergeAttributes,ut=e.mergeDeep,ct=e.minMax,gt=e.nodeInputRule,h=e.nodePasteRule,mt=e.objectIncludes,_t=e.pasteRulesPlugin,bt=e.posToDOMRect,xt=e.removeDuplicates,kt=e.resolveFocusPosition,ht=e.rewriteUnknownContent,yt=e.selectionToInsertionEnd,ft=e.splitExtensions,Pt=e.textInputRule,wt=e.textPasteRule,Et=e.textblockTypeInputRule,Rt=e.wrappingInputRule;var F=/^((?:https?:)?\/\/)?((?:www|m|music)\.)?((?:youtube\.com|youtu\.be|youtube-nocookie\.com))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/,I=/^((?:https?:)?\/\/)?((?:www|m|music)\.)?((?:youtube\.com|youtu\.be|youtube-nocookie\.com))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/g,y=t=>t.match(F),M=(t,n)=>n?"https://www.youtube-nocookie.com/embed/videoseries?list=":t?"https://www.youtube-nocookie.com/embed/":"https://www.youtube.com/embed/",D=t=>t.searchParams.has("v")?{id:t.searchParams.get("v")}:t.hostname==="youtu.be"||t.pathname.includes("shorts")||t.pathname.includes("live")?{id:t.pathname.split("/").pop()}:t.searchParams.has("list")?{id:t.searchParams.get("list"),isPlaylist:!0}:null,j=t=>{var n;let{url:i,allowFullscreen:R,autoplay:A,ccLanguage:a,ccLoadPolicy:C,controls:T,disableKBcontrols:S,enableIFrameApi:B,endTime:l,interfaceLanguage:d,ivLoadPolicy:p,loop:v,modestBranding:O,nocookie:N,origin:u,playlist:c,progressBarColor:g,startAt:m,rel:_}=t;if(!y(i))return null;if(i.includes("/embed/"))return i;let r=new URL(i),{id:b,isPlaylist:L}=(n=D(r))!==null&&n!==void 0?n:{};if(!b)return null;let o=new URL(`${M(N,L)}${b}`);return r.searchParams.has("t")&&o.searchParams.set("start",r.searchParams.get("t").replaceAll("s","")),R===!1&&o.searchParams.set("fs","0"),A&&o.searchParams.set("autoplay","1"),a&&o.searchParams.set("cc_lang_pref",a),C&&o.searchParams.set("cc_load_policy","1"),T||o.searchParams.set("controls","0"),S&&o.searchParams.set("disablekb","1"),B&&o.searchParams.set("enablejsapi","1"),l&&o.searchParams.set("end",l.toString()),d&&o.searchParams.set("hl",d),p&&o.searchParams.set("iv_load_policy",p.toString()),v&&o.searchParams.set("loop","1"),O&&o.searchParams.set("modestbranding","1"),u&&o.searchParams.set("origin",u),c&&o.searchParams.set("playlist",c),m&&o.searchParams.set("start",m.toString()),g&&o.searchParams.set("color",g),_!==void 0&&o.searchParams.set("rel",_.toString()),o.toString()},f=x.create({name:"youtube",addOptions(){return{addPasteHandler:!0,allowFullscreen:!0,autoplay:!1,ccLanguage:void 0,ccLoadPolicy:void 0,controls:!0,disableKBcontrols:!1,enableIFrameApi:!1,endTime:0,height:480,interfaceLanguage:void 0,ivLoadPolicy:0,loop:!1,modestBranding:!1,HTMLAttributes:{},inline:!1,nocookie:!1,origin:"",playlist:"",progressBarColor:void 0,width:640,rel:1}},inline(){return this.options.inline},group(){return this.options.inline?"inline":"block"},draggable:!0,addAttributes(){return{src:{default:null},start:{default:0},width:{default:this.options.width},height:{default:this.options.height}}},parseHTML(){return[{tag:"div[data-youtube-video] iframe"}]},addCommands(){return{setYoutubeVideo:t=>({commands:n})=>y(t.src)?n.insertContent({type:this.name,attrs:t}):!1}},addPasteRules(){return this.options.addPasteHandler?[h({find:I,type:this.type,getAttributes:t=>({src:t.input})})]:[]},renderHTML({HTMLAttributes:t}){let n=j({url:t.src,allowFullscreen:this.options.allowFullscreen,autoplay:this.options.autoplay,ccLanguage:this.options.ccLanguage,ccLoadPolicy:this.options.ccLoadPolicy,controls:this.options.controls,disableKBcontrols:this.options.disableKBcontrols,enableIFrameApi:this.options.enableIFrameApi,endTime:this.options.endTime,interfaceLanguage:this.options.interfaceLanguage,ivLoadPolicy:this.options.ivLoadPolicy,loop:this.options.loop,modestBranding:this.options.modestBranding,nocookie:this.options.nocookie,origin:this.options.origin,playlist:this.options.playlist,progressBarColor:this.options.progressBarColor,startAt:t.start||0,rel:this.options.rel});return t.src=n,["div",{"data-youtube-video":""},["iframe",k(this.options.HTMLAttributes,{width:this.options.width,height:this.options.height,allowfullscreen:this.options.allowFullscreen,autoplay:this.options.autoplay,ccLanguage:this.options.ccLanguage,ccLoadPolicy:this.options.ccLoadPolicy,disableKBcontrols:this.options.disableKBcontrols,enableIFrameApi:this.options.enableIFrameApi,endTime:this.options.endTime,interfaceLanguage:this.options.interfaceLanguage,ivLoadPolicy:this.options.ivLoadPolicy,loop:this.options.loop,modestBranding:this.options.modestBranding,origin:this.options.origin,playlist:this.options.playlist,progressBarColor:this.options.progressBarColor,rel:this.options.rel},t)]]}});var P="__LEPTOS_TIPTAP_BRIDGE__";function K(){let t=globalThis,n=t[P];if(n!=null)return n;let i={modules:{},registerExtension:()=>{throw new Error("leptos-tiptap bridge runtime is not initialized")}};return t[P]=i,i}function w(){return K()}function E(t){w().registerExtension(t)}function U(t){let n={src:t.src};return t.start!=null&&(n.start=t.start),t.width!=null&&(n.width=t.width),t.height!=null&&(n.height=t.height),n}var Y={name:"youtube",create:()=>f,commands:{set_youtube_video:(t,n)=>n.kind==="set_youtube_video"?t.chain().focus().setYoutubeVideo(U(n)).run():!1},selection_keys:["youtube"],selection_state:t=>({youtube:t.isActive("youtube")})};function Lt(){E(Y)}export{Lt as register_youtube}; diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/snippets/mnote-leptos-tiptap-spike-fdb5779a1690afd2/inline0.js b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/mnote-leptos-tiptap-spike-fdb5779a1690afd2/inline0.js new file mode 100644 index 00000000..122d3355 --- /dev/null +++ b/rust/spikes/leptos-tiptap-spike/generated/island/snippets/mnote-leptos-tiptap-spike-fdb5779a1690afd2/inline0.js @@ -0,0 +1,58 @@ + +export function select_mnote_image_node(image) { + try { + const root = image?.closest?.('.ProseMirror'); + const editor = root?.editor; + const view = editor?.view; + if (!editor || !view || typeof view.posAtDOM !== 'function') return false; + const pos = view.posAtDOM(image, 0); + if (!Number.isFinite(pos)) return false; + return editor.chain().focus().setNodeSelection(pos).run() === true; + } catch (error) { + console.warn('mnote image NodeSelection failed', error); + return false; + } +} + +function mnoteImageExtension(url, contentType) { + const urlMatch = String(url || '').match(/\.([a-zA-Z0-9]+)(?:[?#].*)?$/); + if (urlMatch?.[1]) return `.${urlMatch[1].toLowerCase()}`; + const mimeMap = { + 'image/jpeg': '.jpg', + 'image/jpg': '.jpg', + 'image/png': '.png', + 'image/gif': '.gif', + 'image/webp': '.webp', + 'image/svg+xml': '.svg', + 'image/bmp': '.bmp', + }; + return mimeMap[String(contentType || '').toLowerCase()] || '.jpg'; +} + +function mnoteImageFilename(image, url) { + const raw = image.getAttribute('title') || image.getAttribute('alt') || `image-${Date.now()}`; + const base = raw.replace(/[\/:*?"<>|]+/g, '-').trim() || `image-${Date.now()}`; + return /\.[a-zA-Z0-9]+$/.test(base) ? base : `${base}${mnoteImageExtension(url)}`; +} + +export function download_mnote_selected_image() { + try { + const image = document.querySelector('.editor-surface .ProseMirror img.ProseMirror-selectednode[src]'); + if (!(image instanceof HTMLImageElement)) return false; + const src = image.getAttribute('src'); + if (!src) return false; + const url = new URL(src, window.location.href); + if (!(url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'data:')) return false; + const link = document.createElement('a'); + link.href = url.href; + link.download = mnoteImageFilename(image, url.href); + link.style.display = 'none'; + document.body.appendChild(link); + link.click(); + link.remove(); + return true; + } catch (error) { + console.warn('mnote image download failed', error); + return false; + } +} diff --git a/rust/spikes/leptos-tiptap-spike/src/lib.rs b/rust/spikes/leptos-tiptap-spike/src/lib.rs index dde07b89..1a061292 100644 --- a/rust/spikes/leptos-tiptap-spike/src/lib.rs +++ b/rust/spikes/leptos-tiptap-spike/src/lib.rs @@ -5,8 +5,8 @@ use leptos_dom::helpers::window_event_listener; use leptos_tiptap::{ TiptapCodeBlockAttributes, TiptapColorAttributes, TiptapContent, TiptapEditor, TiptapEditorHandle, TiptapExtension, TiptapHeadingLevel, TiptapHighlightAttributes, - TiptapInsertContentOptions, TiptapLinkResource, TiptapMarkName, TiptapRange, - TiptapSelectionState, TiptapTextAlign, + TiptapImageResource, TiptapInsertContentOptions, TiptapLinkResource, TiptapMarkName, + TiptapNodeName, TiptapTocNodeAttrs, TiptapRange, TiptapSchemaTarget, TiptapSelectionState, TiptapTextAlign, }; use serde::{Deserialize, Serialize}; use serde_json::{json, Map, Value}; @@ -43,6 +43,73 @@ const SELECTION_EVENT: &str = "mnote:leptos-tiptap-spike:selection"; const COMMAND_EVENT: &str = "mnote:leptos-tiptap-spike:command"; const HEIGHT_EVENT: &str = "mnote:leptos-tiptap-spike:height"; const STANDALONE_ROOT_ID: &str = "mnote-leptos-tiptap-standalone-root"; +const E24_IMAGE_PLACEHOLDER_SRC: &str = "/api/editor/image-placeholder.svg"; +const E24_IMAGE_PLACEHOLDER_ALT: &str = "E24 图片占位"; +const E24_IMAGE_PLACEHOLDER_TITLE: &str = "E24 图片"; + +#[wasm_bindgen(inline_js = r#" +export function select_mnote_image_node(image) { + try { + const root = image?.closest?.('.ProseMirror'); + const editor = root?.editor; + const view = editor?.view; + if (!editor || !view || typeof view.posAtDOM !== 'function') return false; + const pos = view.posAtDOM(image, 0); + if (!Number.isFinite(pos)) return false; + return editor.chain().focus().setNodeSelection(pos).run() === true; + } catch (error) { + console.warn('mnote image NodeSelection failed', error); + return false; + } +} + +function mnoteImageExtension(url, contentType) { + const urlMatch = String(url || '').match(/\.([a-zA-Z0-9]+)(?:[?#].*)?$/); + if (urlMatch?.[1]) return `.${urlMatch[1].toLowerCase()}`; + const mimeMap = { + 'image/jpeg': '.jpg', + 'image/jpg': '.jpg', + 'image/png': '.png', + 'image/gif': '.gif', + 'image/webp': '.webp', + 'image/svg+xml': '.svg', + 'image/bmp': '.bmp', + }; + return mimeMap[String(contentType || '').toLowerCase()] || '.jpg'; +} + +function mnoteImageFilename(image, url) { + const raw = image.getAttribute('title') || image.getAttribute('alt') || `image-${Date.now()}`; + const base = raw.replace(/[\/:*?"<>|]+/g, '-').trim() || `image-${Date.now()}`; + return /\.[a-zA-Z0-9]+$/.test(base) ? base : `${base}${mnoteImageExtension(url)}`; +} + +export function download_mnote_selected_image() { + try { + const image = document.querySelector('.editor-surface .ProseMirror img.ProseMirror-selectednode[src]'); + if (!(image instanceof HTMLImageElement)) return false; + const src = image.getAttribute('src'); + if (!src) return false; + const url = new URL(src, window.location.href); + if (!(url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'data:')) return false; + const link = document.createElement('a'); + link.href = url.href; + link.download = mnoteImageFilename(image, url.href); + link.style.display = 'none'; + document.body.appendChild(link); + link.click(); + link.remove(); + return true; + } catch (error) { + console.warn('mnote image download failed', error); + return false; + } +} +"#)] +extern "C" { + fn select_mnote_image_node(image: &Element) -> bool; + fn download_mnote_selected_image() -> bool; +} #[derive(Clone, Copy)] struct ToolbarColorOption { @@ -673,6 +740,22 @@ const SPIKE_STYLE: &str = r#" pointer-events: auto; } +.block-drag-tertiary-submenu { + position: absolute; + left: calc(100% + 8px); + top: 0; + width: 206px; + display: grid; + gap: 0; + padding: 6px; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 8px; + background: #fff; + box-shadow: 0 18px 42px rgba(15, 23, 42, 0.18); + z-index: 140; + pointer-events: auto; +} + .block-drag-menu-item[disabled] { color: #a1a1aa; cursor: default; @@ -766,6 +849,18 @@ const SPIKE_STYLE: &str = r#" z-index: 13; } +.block-layout-outline { + position: absolute; + left: 56px; + right: 34px; + min-height: 30px; + border: 1px dashed rgba(148, 163, 184, 0.95); + border-radius: 4px; + background: rgba(255, 71, 71, 0.06); + pointer-events: none; + z-index: 12; +} + .floating-toolbar { position: absolute; left: 0; @@ -792,6 +887,63 @@ const SPIKE_STYLE: &str = r#" gap: 2px; } +.image-floating-toolbar { + position: absolute; + left: 0; + top: 0; + transform: translate(-50%, calc(-100% - 12px)); + z-index: 122; + display: inline-flex; + align-items: center; + gap: 3px; + padding: 4px; + border: 1px solid rgba(15, 23, 42, 0.1); + border-radius: 8px; + background: rgba(255, 255, 255, 0.98); + color: #111827; + box-shadow: 0 14px 34px rgba(15, 23, 42, 0.16); + backdrop-filter: blur(16px); + pointer-events: auto; +} + +.image-toolbar-btn { + min-width: 30px; + height: 30px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 8px; + border: none; + border-radius: 6px; + background: transparent; + color: inherit; + font: inherit; + font-size: 13px; + font-weight: 600; + cursor: pointer; +} + +.image-toolbar-btn:hover, +.image-toolbar-btn:focus-visible, +.image-toolbar-btn[data-active="true"] { + background: rgba(255, 229, 229, 0.95); + outline: none; +} + +.image-toolbar-btn:disabled { + color: #a1a1aa; + cursor: not-allowed; + opacity: 0.55; + background: transparent; +} + +.image-toolbar-separator { + width: 1px; + align-self: stretch; + min-height: 22px; + background: rgba(148, 163, 184, 0.3); +} + .toolbar-popover-anchor { position: relative; display: inline-flex; @@ -1027,6 +1179,338 @@ const SPIKE_STYLE: &str = r#" color: #1f2937; } +.editor-surface .ProseMirror img[src] { + display: block; + max-width: 100%; + height: auto; + margin: 8px 0; + border-radius: 6px; +} + +.editor-surface .ProseMirror img[data-align="center"] { + margin-left: auto; + margin-right: auto; +} + +.editor-surface .ProseMirror img[data-align="right"] { + margin-left: auto; + margin-right: 0; +} + +.editor-surface .ProseMirror img.ProseMirror-selectednode { + outline: 2px solid rgba(255, 71, 71, 0.78); + outline-offset: 3px; + box-shadow: 0 0 0 5px rgba(255, 71, 71, 0.12); +} + +.editor-surface .ProseMirror .tiptap-table-of-contents-node { + display: block; + margin: 12px 0; + padding: 10px 12px; + border: 1px solid rgba(229, 231, 235, 0.95); + border-radius: 6px; + background: #fff; + color: #374151; +} + +.editor-surface .ProseMirror .tiptap-table-of-contents-node.ProseMirror-selectednode { + outline: 2px solid rgba(255, 71, 71, 0.62); + outline-offset: 2px; +} + +.tiptap-table-of-contents-title-row { + display: flex; + align-items: center; + justify-content: space-between; + min-height: 24px; + gap: 8px; +} + +.tiptap-table-of-contents-title { + font-size: 14px; + line-height: 20px; + font-weight: 600; + color: #4b5563; +} + +.tiptap-table-of-contents-title-toggle { + width: 24px; + height: 24px; + display: inline-flex; + align-items: center; + justify-content: center; + border: 0; + border-radius: 4px; + background: transparent; + color: #9ca3af; + font-size: 12px; + cursor: pointer; +} + +.tiptap-table-of-contents-title-toggle:hover { + background: rgba(17, 24, 39, 0.06); + color: #4b5563; +} + +.tiptap-table-of-contents-list { + display: grid; + gap: 2px; + margin-top: 6px; +} + +.tiptap-table-of-contents-item { + display: block; + min-height: 24px; + padding: 2px 6px; + border-radius: 4px; + color: #6b7280; + font-size: 14px; + line-height: 20px; + text-decoration: none; +} + +.tiptap-table-of-contents-item[data-depth="2"] { padding-left: 20px; } +.tiptap-table-of-contents-item[data-depth="3"] { padding-left: 34px; } +.tiptap-table-of-contents-item[data-depth="4"] { padding-left: 48px; } +.tiptap-table-of-contents-item[data-depth="5"] { padding-left: 62px; } +.tiptap-table-of-contents-item[data-depth="6"] { padding-left: 76px; } + +.tiptap-table-of-contents-item:hover { + background: rgba(17, 24, 39, 0.05); + color: #374151; +} + +.tiptap-table-of-contents-empty { + margin-top: 4px; + color: #9ca3af; + font-size: 14px; + line-height: 22px; +} + +.editor-surface .ProseMirror .tableWrapper { + width: 100%; + overflow-x: auto; + margin: 8px 0; +} + +.editor-surface .ProseMirror table { + width: 100%; + border-collapse: collapse; + table-layout: fixed; + margin: 8px 0; +} + +.editor-surface .ProseMirror .tableWrapper table { + margin: 0; +} + +.editor-surface .ProseMirror td, +.editor-surface .ProseMirror th { + position: relative; + min-width: 84px; + height: 32px; + padding: 5px 8px; + border: 1px solid rgba(148, 163, 184, 0.72); + vertical-align: top; +} + +.editor-surface .ProseMirror th { + background: rgba(248, 250, 252, 0.96); + font-weight: 600; +} + +.editor-surface .ProseMirror table[data-hidden-borders="true"] td, +.editor-surface .ProseMirror table[data-hidden-borders="true"] th { + border-width: 0; +} + +.editor-surface .ProseMirror .selectedCell::after { + content: ""; + position: absolute; + inset: 0; + background: rgba(59, 130, 246, 0.12); + pointer-events: none; +} + +.editor-surface .ProseMirror .column-resize-handle { + position: absolute; + top: 0; + right: -4px; + bottom: -1px; + width: 8px; + background: rgba(239, 68, 68, 0.34); + cursor: col-resize; + pointer-events: none; + z-index: 4; +} + +.editor-surface .ProseMirror .column-resize-dragging { + background: rgba(255, 71, 71, 0.08); +} + +.editor-surface .ProseMirror.resize-cursor, +.editor-surface .ProseMirror.resize-cursor * { + cursor: col-resize !important; +} + +.table-controls { + position: absolute; + z-index: 118; + pointer-events: none; +} + +.table-aux-btn { + position: absolute; + width: 18px; + height: 18px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0; + border: none; + border-radius: 4px; + background: transparent; + color: rgba(148, 163, 184, 0.95); + font: inherit; + font-size: 15px; + line-height: 1; + cursor: pointer; + pointer-events: auto; +} + +.table-aux-btn:hover, +.table-aux-btn:focus-visible, +.table-aux-btn[data-active="true"] { + background: rgba(255, 229, 229, 0.95); + color: rgba(107, 114, 128, 0.96); + outline: none; +} + +.table-selection-overlay { + position: absolute; + border-radius: 4px; + background: rgba(255, 71, 71, 0.12); + outline: 1px solid rgba(255, 71, 71, 0.18); + pointer-events: none; +} + +.table-toolbar { + position: absolute; + top: 34px; + right: 44px; + display: inline-flex; + align-items: center; + gap: 4px; + padding: 5px; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 8px; + background: #fff; + color: #111827; + box-shadow: 0 14px 34px rgba(15, 23, 42, 0.16); + z-index: 120; + pointer-events: auto; +} + +.table-toolbar-btn { + min-width: 30px; + height: 30px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 8px; + border: none; + border-radius: 5px; + background: transparent; + color: #111827; + font: inherit; + font-size: 13px; + cursor: pointer; +} + +.table-toolbar-btn:hover, +.table-toolbar-btn:focus-visible { + background: rgba(241, 245, 249, 0.95); + outline: none; +} + +.table-toolbar-separator { + align-self: stretch; + width: 1px; + min-height: 22px; + background: rgba(148, 163, 184, 0.3); +} + +.table-options-menu { + position: absolute; + top: calc(100% + 6px); + right: 0; + width: 160px; + display: grid; + gap: 2px; + padding: 6px; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 8px; + background: #fff; + color: #111827; + box-shadow: 0 16px 36px rgba(15, 23, 42, 0.16); + z-index: 125; +} + +.table-option-btn { + width: 100%; + min-height: 30px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + padding: 5px 8px; + border: none; + border-radius: 5px; + background: transparent; + color: #111827; + font: inherit; + font-size: 13px; + cursor: pointer; + text-align: left; +} + +.table-option-btn:hover, +.table-option-btn:focus-visible { + background: rgba(241, 245, 249, 0.95); + outline: none; +} + +.table-option-switch { + position: relative; + width: 28px; + height: 16px; + flex: 0 0 auto; + border-radius: 999px; + background: #d1d5db; + transition: background .12s ease; +} + +.table-option-switch::after { + content: ""; + position: absolute; + top: 2px; + left: 2px; + width: 12px; + height: 12px; + border-radius: 999px; + background: #fff; + box-shadow: 0 1px 2px rgba(15, 23, 42, 0.2); + transition: transform .12s ease; +} + +.table-option-btn[aria-checked="true"] .table-option-switch { + background: #9ca3af; +} + +.table-option-btn[aria-checked="true"] .table-option-switch::after { + transform: translateX(12px); +} + .app-shell-embedded .editor-surface .ProseMirror { min-height: 600px; width: min(100%, 708px); @@ -1379,6 +1863,9 @@ enum SlashActionKind { Quote, CodeBlock, Divider, + SimpleTable, + Image, + Toc, } #[derive(Clone, Copy)] @@ -1392,7 +1879,42 @@ struct SlashAction { shortcut: &'static str, } -const SLASH_ACTIONS: [SlashAction; 17] = [ +#[derive(Clone, Copy)] +struct FoldedHeadingAction { + level: u8, + id: &'static str, + icon: &'static str, + label: &'static str, +} + +const FOLDED_HEADING_ACTIONS: [FoldedHeadingAction; 4] = [ + FoldedHeadingAction { + level: 1, + id: "1", + icon: "H1", + label: "折叠主标题", + }, + FoldedHeadingAction { + level: 2, + id: "2", + icon: "H2", + label: "折叠大标题", + }, + FoldedHeadingAction { + level: 3, + id: "3", + icon: "H3", + label: "折叠中标题", + }, + FoldedHeadingAction { + level: 4, + id: "4", + icon: "H4", + label: "折叠小标题", + }, +]; + +const SLASH_ACTIONS: [SlashAction; 20] = [ SlashAction { kind: SlashActionKind::AiAssistant, id: "ai-assistant", @@ -1546,6 +2068,33 @@ const SLASH_ACTIONS: [SlashAction; 17] = [ description: "插入分隔线", shortcut: "/fgx", }, + SlashAction { + kind: SlashActionKind::SimpleTable, + id: "simple-table", + category: "进阶块列表", + icon: "▦", + label: "简单表格", + description: "插入基础表格", + shortcut: "/jdbg", + }, + SlashAction { + kind: SlashActionKind::Image, + id: "image", + category: "媒体与附件", + icon: "▧", + label: "图片", + description: "插入图片", + shortcut: "/tp", + }, + SlashAction { + kind: SlashActionKind::Toc, + id: "toc", + category: "进阶块列表", + icon: "☰", + label: "页面目录", + description: "根据当前标题生成目录", + shortcut: "/toc", + }, ]; #[derive(Clone, Debug, Serialize, Deserialize)] @@ -2236,6 +2785,44 @@ struct FloatingToolbarAnchor { left: f64, } +#[derive(Clone, Debug, PartialEq)] +struct ImageToolbarAnchor { + top: f64, + left: f64, + align: String, +} + +#[derive(Clone, Copy, Debug, PartialEq)] +struct TableOverlayAnchor { + top: f64, + left: f64, + width: f64, + height: f64, + rows: usize, + cols: usize, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +enum TableSelectionKind { + Row, + Column, +} + +impl TableSelectionKind { + fn id(self) -> &'static str { + match self { + Self::Row => "row", + Self::Column => "column", + } + } +} + +#[derive(Clone, Copy, Debug, PartialEq)] +struct TableSelectionOverlayState { + kind: TableSelectionKind, + index: usize, +} + #[derive(Clone, Debug, PartialEq)] struct BlockMenuLayout { max_height: f64, @@ -2672,6 +3259,89 @@ fn block_state_from_index(index: usize) -> Option { }) } +fn table_overlay_anchor_from_table(table: &Element) -> Option { + let stage = editor_stage_element()?; + let table_rect = table.get_bounding_client_rect(); + let stage_rect = stage.get_bounding_client_rect(); + if table_rect.width() <= 0.0 || table_rect.height() <= 0.0 { + return None; + } + + let rows = table.get_elements_by_tag_name("tr").length() as usize; + let cols = table + .query_selector("tr") + .ok() + .flatten() + .map(|row| row.children().length() as usize) + .unwrap_or(0); + if rows == 0 || cols == 0 { + return None; + } + + Some(TableOverlayAnchor { + top: table_rect.top() - stage_rect.top(), + left: table_rect.left() - stage_rect.left(), + width: table_rect.width(), + height: table_rect.height(), + rows, + cols, + }) +} + +fn current_table_overlay_anchor() -> Option { + let table = window() + .and_then(|win| win.document()) + .and_then(|document| { + document + .query_selector(".editor-surface .ProseMirror table") + .ok() + .flatten() + })?; + table_overlay_anchor_from_table(&table) +} + +fn table_row_aux_style(anchor: &TableOverlayAnchor, index: usize) -> String { + let row_height = anchor.height / anchor.rows.max(1) as f64; + format!( + "left:-24px;top:{:.1}px;", + (row_height * index as f64) + (row_height / 2.0) - 9.0 + ) +} + +fn table_col_aux_style(anchor: &TableOverlayAnchor, index: usize) -> String { + let col_width = anchor.width / anchor.cols.max(1) as f64; + format!( + "left:{:.1}px;top:-24px;", + (col_width * index as f64) + (col_width / 2.0) - 9.0 + ) +} + +fn table_selection_overlay_style( + anchor: &TableOverlayAnchor, + selection: &TableSelectionOverlayState, +) -> String { + match selection.kind { + TableSelectionKind::Row => { + let row_height = anchor.height / anchor.rows.max(1) as f64; + format!( + "left:0;top:{:.1}px;width:{:.1}px;height:{:.1}px;", + row_height * selection.index as f64, + anchor.width, + row_height + ) + } + TableSelectionKind::Column => { + let col_width = anchor.width / anchor.cols.max(1) as f64; + format!( + "left:{:.1}px;top:0;width:{:.1}px;height:{:.1}px;", + col_width * selection.index as f64, + col_width, + anchor.height + ) + } + } +} + fn prosemirror_node_size(node: &Value) -> Option { match node.get("type").and_then(Value::as_str) { Some("text") => Some( @@ -2790,6 +3460,43 @@ fn floating_toolbar_anchor_from_selection() -> Option { }) } +fn image_toolbar_anchor_from_image(image: &Element) -> Option { + let stage = editor_stage_element()?; + let rect = image.get_bounding_client_rect(); + if rect.width() <= 0.0 && rect.height() <= 0.0 { + return None; + } + let stage_rect = stage.get_bounding_client_rect(); + let align = image + .get_attribute("data-align") + .filter(|value| !value.trim().is_empty()) + .unwrap_or_else(|| "left".to_string()); + + Some(ImageToolbarAnchor { + top: (rect.top() - stage_rect.top()).max(60.0), + left: rect.left() + (rect.width() / 2.0) - stage_rect.left(), + align, + }) +} + +fn image_element_from_target(target: web_sys::EventTarget) -> Option { + let element = target_element(target)?; + if element.tag_name().eq_ignore_ascii_case("img") + && element + .closest(".editor-surface .ProseMirror") + .ok() + .flatten() + .is_some() + { + return Some(element); + } + + element + .closest(".editor-surface .ProseMirror img[src]") + .ok() + .flatten() +} + fn hover_anchor_top(block: &HoveredBlockState) -> f64 { if block.height > HANDLE_MULTILINE_HEIGHT { block.top + 12.0 @@ -3038,21 +3745,25 @@ fn turn_into_block(node: &Value, action: SlashActionKind) -> Value { SlashActionKind::Heading1 => { let mut attrs = Map::new(); attrs.insert("level".to_string(), json!(1)); + attrs.insert("collapsed".to_string(), Value::Null); node_with_attrs("heading", Some(attrs), inline) } SlashActionKind::Heading2 => { let mut attrs = Map::new(); attrs.insert("level".to_string(), json!(2)); + attrs.insert("collapsed".to_string(), Value::Null); node_with_attrs("heading", Some(attrs), inline) } SlashActionKind::Heading3 => { let mut attrs = Map::new(); attrs.insert("level".to_string(), json!(3)); + attrs.insert("collapsed".to_string(), Value::Null); node_with_attrs("heading", Some(attrs), inline) } SlashActionKind::Heading4 => { let mut attrs = Map::new(); attrs.insert("level".to_string(), json!(4)); + attrs.insert("collapsed".to_string(), Value::Null); node_with_attrs("heading", Some(attrs), inline) } SlashActionKind::BulletList => { @@ -3077,6 +3788,14 @@ fn turn_into_block(node: &Value, action: SlashActionKind) -> Value { node_with_attrs("codeBlock", Some(attrs), content) } SlashActionKind::Divider => node_with_attrs("horizontalRule", None, Vec::new()), + SlashActionKind::SimpleTable | SlashActionKind::Toc => paragraph_node(inline), + SlashActionKind::Image => { + let mut attrs = Map::new(); + attrs.insert("src".to_string(), json!(E24_IMAGE_PLACEHOLDER_SRC)); + attrs.insert("alt".to_string(), json!(E24_IMAGE_PLACEHOLDER_ALT)); + attrs.insert("title".to_string(), json!(E24_IMAGE_PLACEHOLDER_TITLE)); + node_with_attrs("image", Some(attrs), Vec::new()) + } } } @@ -3579,6 +4298,12 @@ fn p0_extensions() -> Vec { TiptapExtension::TaskList, TiptapExtension::CodeBlock, TiptapExtension::HorizontalRule, + TiptapExtension::Image, + TiptapExtension::Table, + TiptapExtension::TableRow, + TiptapExtension::TableCell, + TiptapExtension::TableHeader, + TiptapExtension::TocNode, TiptapExtension::History, TiptapExtension::Underline, TiptapExtension::TextStyle, @@ -3943,6 +4668,197 @@ fn apply_text_align( .map_err(|err| format!("命令执行失败:{err}")) } +fn apply_image_align( + editor: TiptapEditorHandle, + align: &'static str, +) -> Result<&'static str, String> { + let _ = editor.focus(); + let mut attrs = leptos_tiptap::TiptapAttributes::new(); + attrs.insert("data-align", align); + editor + .update_attributes(TiptapSchemaTarget::Node(TiptapNodeName::Image), attrs) + .map(|_| "已更新图片对齐") + .map_err(|err| format!("命令执行失败:{err}")) +} + +#[derive(Clone, Copy)] +enum TableToolbarAction { + AddRowAfter, + AddColumnAfter, + DeleteRow, + DeleteColumn, + ClearCell, + DeleteTable, +} + +#[derive(Clone, Copy)] +enum TableOptionAction { + ToggleHeaderRow, + ToggleHeaderColumn, + ToggleHiddenBorders, +} + +impl TableToolbarAction { + fn id(self) -> &'static str { + match self { + Self::AddRowAfter => "add-row-after", + Self::AddColumnAfter => "add-column-after", + Self::DeleteRow => "delete-row", + Self::DeleteColumn => "delete-column", + Self::ClearCell => "clear-cell", + Self::DeleteTable => "delete-table", + } + } + + fn icon(self) -> &'static str { + match self { + Self::AddRowAfter => "+R", + Self::AddColumnAfter => "+C", + Self::DeleteRow => "-R", + Self::DeleteColumn => "-C", + Self::ClearCell => "⌫", + Self::DeleteTable => "×", + } + } + + fn title(self) -> &'static str { + match self { + Self::AddRowAfter => "下方插入行", + Self::AddColumnAfter => "右侧插入列", + Self::DeleteRow => "删除当前行", + Self::DeleteColumn => "删除当前列", + Self::ClearCell => "清空当前单元格", + Self::DeleteTable => "删除表格", + } + } +} + +const TABLE_TOOLBAR_ACTIONS: [TableToolbarAction; 6] = [ + TableToolbarAction::AddRowAfter, + TableToolbarAction::AddColumnAfter, + TableToolbarAction::ClearCell, + TableToolbarAction::DeleteRow, + TableToolbarAction::DeleteColumn, + TableToolbarAction::DeleteTable, +]; + +impl TableOptionAction { + fn id(self) -> &'static str { + match self { + Self::ToggleHeaderRow => "toggle-header-row", + Self::ToggleHeaderColumn => "toggle-header-column", + Self::ToggleHiddenBorders => "toggle-hidden-borders", + } + } + + fn title(self) -> &'static str { + match self { + Self::ToggleHeaderRow => "标题行", + Self::ToggleHeaderColumn => "标题列", + Self::ToggleHiddenBorders => "隐藏边框线", + } + } +} + +const TABLE_OPTION_ACTIONS: [TableOptionAction; 3] = [ + TableOptionAction::ToggleHeaderRow, + TableOptionAction::ToggleHeaderColumn, + TableOptionAction::ToggleHiddenBorders, +]; + +fn run_table_toolbar_action( + editor: TiptapEditorHandle, + action: TableToolbarAction, +) -> Result<&'static str, String> { + let result = match action { + TableToolbarAction::AddRowAfter => editor.add_table_row_after(), + TableToolbarAction::AddColumnAfter => editor.add_table_column_after(), + TableToolbarAction::DeleteRow => editor.delete_table_row(), + TableToolbarAction::DeleteColumn => editor.delete_table_column(), + TableToolbarAction::ClearCell => editor.clear_table_cell(), + TableToolbarAction::DeleteTable => editor.delete_table(), + }; + result + .map(|_| action.title()) + .map_err(|err| format!("命令执行失败:{err}")) +} + +fn run_table_option_action( + editor: TiptapEditorHandle, + action: TableOptionAction, +) -> Result<&'static str, String> { + let result = match action { + TableOptionAction::ToggleHeaderRow => editor.toggle_table_header_row(), + TableOptionAction::ToggleHeaderColumn => editor.toggle_table_header_column(), + TableOptionAction::ToggleHiddenBorders => editor.toggle_table_hidden_borders(), + }; + result + .map(|_| action.title()) + .map_err(|err| format!("命令执行失败:{err}")) +} + +fn first_table_node(value: &Value) -> Option<&Value> { + if value.get("type").and_then(Value::as_str) == Some("table") { + return Some(value); + } + if let Some(table) = value + .get("props") + .and_then(|props| props.get("tiptapTable")) + .and_then(first_table_node) + { + return Some(table); + } + for key in ["content", "children"] { + if let Some(children) = value.get(key).and_then(Value::as_array) { + if let Some(table) = children.iter().find_map(first_table_node) { + return Some(table); + } + } + } + None +} + +fn table_option_checked(document: &Value, action: TableOptionAction) -> bool { + let Some(table) = first_table_node(document) else { + return false; + }; + match action { + TableOptionAction::ToggleHiddenBorders => table + .get("attrs") + .and_then(|attrs| attrs.get("hiddenBorders")) + .and_then(Value::as_bool) + .unwrap_or(false), + TableOptionAction::ToggleHeaderRow => table + .get("content") + .and_then(Value::as_array) + .and_then(|rows| rows.first()) + .and_then(|row| row.get("content")) + .and_then(Value::as_array) + .map(|cells| { + !cells.is_empty() + && cells + .iter() + .all(|cell| cell.get("type").and_then(Value::as_str) == Some("tableHeader")) + }) + .unwrap_or(false), + TableOptionAction::ToggleHeaderColumn => table + .get("content") + .and_then(Value::as_array) + .map(|rows| { + !rows.is_empty() + && rows.iter().all(|row| { + row.get("content") + .and_then(Value::as_array) + .and_then(|cells| cells.first()) + .and_then(|cell| cell.get("type")) + .and_then(Value::as_str) + == Some("tableHeader") + }) + }) + .unwrap_or(false), + } +} + fn run_slash_action( editor: TiptapEditorHandle, action: SlashActionKind, @@ -3966,6 +4882,20 @@ fn run_slash_action( language: Some("rust".into()), })), SlashActionKind::Divider => editor.set_horizontal_rule(), + SlashActionKind::SimpleTable => { + let _ = editor.focus(); + editor.insert_table(4, 3, false) + } + SlashActionKind::Image => editor.set_image(TiptapImageResource { + src: E24_IMAGE_PLACEHOLDER_SRC.into(), + alt: Some(E24_IMAGE_PLACEHOLDER_ALT.into()), + title: Some(E24_IMAGE_PLACEHOLDER_TITLE.into()), + }), + SlashActionKind::Toc => editor.insert_toc_node(TiptapTocNodeAttrs { + top_offset: Some(0), + max_show_count: Some(20), + show_title: Some(true), + }), }; result @@ -3986,6 +4916,9 @@ fn run_slash_action( SlashActionKind::Quote => "已切到引述文字", SlashActionKind::CodeBlock => "已切到代码块", SlashActionKind::Divider => "已插入分割线", + SlashActionKind::SimpleTable => "已插入简单表格", + SlashActionKind::Image => "已插入图片", + SlashActionKind::Toc => "已插入页面目录", }) .map_err(|err| format!("命令执行失败:{err}")) } @@ -4002,6 +4935,28 @@ fn run_block_turn_into_action( .ok_or_else(|| format!("找不到第 {} 个块的选择范围", block_index + 1))?; match action { + SlashActionKind::SimpleTable => { + editor + .set_text_selection(range) + .map_err(|err| format!("选中当前块失败:{err}"))?; + editor + .insert_table(4, 3, false) + .map(|_| "已把当前块转成简单表格") + .map_err(|err| format!("命令执行失败:{err}")) + } + SlashActionKind::Toc => { + editor + .set_text_selection(range) + .map_err(|err| format!("选中当前块失败:{err}"))?; + editor + .insert_toc_node(TiptapTocNodeAttrs { + top_offset: Some(0), + max_show_count: Some(20), + show_title: Some(true), + }) + .map(|_| "已把当前块转成页面目录") + .map_err(|err| format!("命令执行失败:{err}")) + } SlashActionKind::Divider => editor .insert_content_at( range, @@ -4026,6 +4981,54 @@ fn run_block_turn_into_action( } } +fn heading_level_from_u8(level: u8) -> TiptapHeadingLevel { + match level { + 1 => TiptapHeadingLevel::H1, + 2 => TiptapHeadingLevel::H2, + 3 => TiptapHeadingLevel::H3, + 4 => TiptapHeadingLevel::H4, + 5 => TiptapHeadingLevel::H5, + _ => TiptapHeadingLevel::H6, + } +} + +fn run_block_turn_into_folded_heading_action( + editor: TiptapEditorHandle, + block_index: usize, + level: u8, +) -> Result<&'static str, String> { + let document = editor + .get_json() + .map_err(|err| format!("读取当前 JSON 失败:{err}"))?; + let range = top_level_block_range(&document, block_index) + .ok_or_else(|| format!("找不到第 {} 个块的选择范围", block_index + 1))?; + + editor + .set_text_selection(range) + .map_err(|err| format!("选中当前块失败:{err}"))?; + editor + .clear_nodes() + .map_err(|err| format!("清理当前块样式失败:{err}"))?; + editor + .set_heading_with_collapsed(heading_level_from_u8(level), true) + .map_err(|err| format!("命令执行失败:{err}"))?; + let mut attrs = leptos_tiptap::TiptapAttributes::new(); + attrs.insert("collapsed", true); + editor + .update_attributes(TiptapSchemaTarget::Node(TiptapNodeName::Heading), attrs) + .map_err(|err| format!("写入折叠属性失败:{err}"))?; + let _ = editor.focus(); + let _ = editor.select_textblock_end(); + + Ok(match level { + 1 => "已切到折叠主标题", + 2 => "已切到折叠大标题", + 3 => "已切到折叠中标题", + 4 => "已切到折叠小标题", + _ => "已切到折叠标题", + }) +} + fn normalized_page_block_title(text: &str) -> String { let trimmed = text.trim(); if trimmed.is_empty() { @@ -4214,6 +5217,64 @@ fn top_level_block_is_page(editor: TiptapEditorHandle, block_index: usize) -> bo .unwrap_or(false) } +fn top_level_block_matches_action( + editor: TiptapEditorHandle, + block_index: usize, + action: SlashActionKind, +) -> bool { + let Some(block) = editor.get_json().ok().and_then(|document| { + document + .get("content") + .and_then(Value::as_array) + .and_then(|content| content.get(block_index).cloned()) + }) else { + return false; + }; + + let node_type = block + .get("type") + .and_then(Value::as_str) + .unwrap_or_default(); + match action { + SlashActionKind::Paragraph => { + node_type == "paragraph" && !inline_has_page_block_link(&block) + } + SlashActionKind::Heading1 + | SlashActionKind::Heading2 + | SlashActionKind::Heading3 + | SlashActionKind::Heading4 => { + let expected_level = match action { + SlashActionKind::Heading1 => 1, + SlashActionKind::Heading2 => 2, + SlashActionKind::Heading3 => 3, + SlashActionKind::Heading4 => 4, + _ => 0, + }; + node_type == "heading" + && block + .get("attrs") + .and_then(|attrs| attrs.get("level")) + .and_then(Value::as_i64) + .map(|level| level == expected_level) + .unwrap_or(false) + } + SlashActionKind::BulletList => node_type == "bulletList", + SlashActionKind::OrderedList => node_type == "orderedList", + SlashActionKind::Todo | SlashActionKind::AdvancedTodo => node_type == "taskList", + SlashActionKind::Quote => node_type == "blockquote", + SlashActionKind::CodeBlock => node_type == "codeBlock", + SlashActionKind::Divider => node_type == "horizontalRule", + SlashActionKind::SimpleTable => node_type == "table", + SlashActionKind::Image => node_type == "image", + SlashActionKind::Toc => node_type == "tocNode", + SlashActionKind::AiAssistant + | SlashActionKind::AiWrite + | SlashActionKind::ContinueWriting + | SlashActionKind::Summarize + | SlashActionKind::MoreAi => false, + } +} + fn page_reference_paragraph_node(page_id: &str, workspace_id: Option<&str>, title: &str) -> Value { let href = if page_id.trim().is_empty() { "#".to_string() @@ -4232,7 +5293,7 @@ fn page_reference_paragraph_node(page_id: &str, workspace_id: Option<&str>, titl "type": "link", "attrs": { "href": href, - "target": null, + "target": "_self", "rel": "noopener noreferrer nofollow", "class": "mnote-page-block-link", } @@ -4433,11 +5494,18 @@ fn App(mount_options: MountOptions) -> impl IntoView { let (dirty_count, set_dirty_count) = signal(0_u32); let (editor_focused, set_editor_focused) = signal(false); let (text_selection_active, set_text_selection_active) = signal(false); + let (table_toolbar_open, set_table_toolbar_open) = signal(false); + let (table_options_open, set_table_options_open) = signal(false); + let (table_overlay_anchor, set_table_overlay_anchor) = signal(None::); + let (table_selection_overlay, set_table_selection_overlay) = + signal(None::); let (floating_toolbar_anchor, set_floating_toolbar_anchor) = signal(None::); + let (image_toolbar_anchor, set_image_toolbar_anchor) = signal(None::); let (locked_toolbar_anchor, set_locked_toolbar_anchor) = signal(None::); let (slash_open, set_slash_open) = signal(false); let (slash_index, set_slash_index) = signal(0_usize); + let (slash_query, set_slash_query) = signal(String::new()); let (turn_into_open, set_turn_into_open) = signal(false); let (color_menu_open, set_color_menu_open) = signal(false); let (more_menu_open, set_more_menu_open) = signal(false); @@ -4446,6 +5514,7 @@ fn App(mount_options: MountOptions) -> impl IntoView { let (block_menu_anchor, set_block_menu_anchor) = signal(None::); let (block_menu_open, set_block_menu_open) = signal(false); let (block_turn_into_open, set_block_turn_into_open) = signal(false); + let (block_folded_title_open, set_block_folded_title_open) = signal(false); let (pending_drag, set_pending_drag) = signal(None::); let (dragging_block_index, set_dragging_block_index) = signal(None::); let (dragging_block_anchor, set_dragging_block_anchor) = signal(None::); @@ -4517,9 +5586,11 @@ fn App(mount_options: MountOptions) -> impl IntoView { { let block_menu_open = block_menu_open; let set_block_turn_into_open = set_block_turn_into_open; + let set_block_folded_title_open = set_block_folded_title_open; Effect::new(move |_| { if !block_menu_open.get() { set_block_turn_into_open.set(false); + set_block_folded_title_open.set(false); } }); } @@ -4772,7 +5843,12 @@ fn App(mount_options: MountOptions) -> impl IntoView { { let set_editor_focused = set_editor_focused; let set_text_selection_active = set_text_selection_active; + let set_table_toolbar_open = set_table_toolbar_open; + let set_table_options_open = set_table_options_open; + let set_table_overlay_anchor = set_table_overlay_anchor; + let set_table_selection_overlay = set_table_selection_overlay; let set_floating_toolbar_anchor = set_floating_toolbar_anchor; + let set_image_toolbar_anchor = set_image_toolbar_anchor; let set_slash_open = set_slash_open; let set_turn_into_open = set_turn_into_open; let set_hovered_block = set_hovered_block; @@ -4838,13 +5914,35 @@ fn App(mount_options: MountOptions) -> impl IntoView { if let Some(target) = event.target() { if let Some(element) = target_element(target) { if element - .closest(&format!("{HANDLE_SHELL_SELECTOR}, .floating-toolbar")) + .closest(&format!("{HANDLE_SHELL_SELECTOR}, .floating-toolbar, .image-floating-toolbar, .table-toolbar, .table-controls")) .ok() .flatten() .is_some() { return; } + let in_image = element + .closest(".editor-surface .ProseMirror img[src]") + .ok() + .flatten() + .is_some(); + if !in_image { + let _ = set_image_toolbar_anchor.try_set(None); + } + let _ = set_table_options_open.try_set(false); + let table = element + .closest(".editor-surface .ProseMirror table") + .ok() + .flatten(); + let in_table = table.is_some(); + let _ = set_table_toolbar_open.try_set(in_table); + if let Some(table) = table { + let _ = set_table_overlay_anchor + .try_set(table_overlay_anchor_from_table(&table)); + } else { + let _ = set_table_overlay_anchor.try_set(None); + let _ = set_table_selection_overlay.try_set(None); + } } } let _ = try_sync_editor_overlay_state( @@ -4957,6 +6055,8 @@ fn App(mount_options: MountOptions) -> impl IntoView { let slash_open = slash_open; let slash_index = slash_index; let set_slash_index = set_slash_index; + let slash_query = slash_query; + let set_slash_query = set_slash_query; let set_turn_into_open = set_turn_into_open; let set_block_menu_open = set_block_menu_open; let block_menu_open = block_menu_open; @@ -4968,11 +6068,79 @@ fn App(mount_options: MountOptions) -> impl IntoView { return; } + if (event.ctrl_key() || event.meta_key()) + && event.shift_key() + && event.key().eq_ignore_ascii_case("u") + { + event.prevent_default(); + let Some(block) = hovered_block_from_selection() + .or_else(|| hovered_block.try_get_untracked().flatten()) + .or_else(|| block_state_from_index(0)) + else { + let _ = + set_command_feedback.try_set("没有可进入布局选中态的当前块".to_string()); + return; + }; + let _ = set_hovered_block.try_set(Some(block.clone())); + let _ = set_block_keyboard_mode.try_set(true); + let _ = set_slash_open.try_set(false); + let _ = set_slash_query.try_set(String::new()); + let _ = set_turn_into_open.try_set(false); + let _ = set_block_menu_open.try_set(false); + let _ = set_block_menu_anchor.try_set(None); + let _ = + set_command_feedback.try_set(format!("已进入块布局选中态:{}", block.label)); + return; + } + + if (event.ctrl_key() || event.meta_key()) && event.shift_key() && !event.alt_key() { + let action = match event.key().as_str() { + "1" | "!" => Some(SlashActionKind::Heading1), + "2" | "@" => Some(SlashActionKind::Heading2), + "3" | "#" => Some(SlashActionKind::Heading3), + "5" | "%" => Some(SlashActionKind::Todo), + "6" | "^" => Some(SlashActionKind::BulletList), + "7" | "&" => Some(SlashActionKind::OrderedList), + _ => None, + }; + if let Some(action) = action { + event.prevent_default(); + let result = run_slash_action(editor, action); + let message = match result { + Ok(message) => { + sync_persisted_editor_command( + editor, + &runtime_persisted_identity(document_id, workspace_id), + set_dirty_count, + set_html_output, + set_document_json, + set_json_output, + title, + set_command_feedback, + message, + ); + None + } + Err(err) => Some(err), + }; + if let Some(message) = message { + let _ = set_command_feedback.try_set(message); + } + let _ = set_slash_open.try_set(false); + let _ = set_slash_query.try_set(String::new()); + let _ = set_turn_into_open.try_set(false); + let _ = set_block_menu_open.try_set(false); + let _ = set_block_menu_anchor.try_set(None); + return; + } + } + if event.key() == "Escape" { event.prevent_default(); let overlay_open = slash_open.try_get_untracked().unwrap_or(false) || block_menu_open.try_get_untracked().unwrap_or(false); let _ = set_slash_open.try_set(false); + let _ = set_slash_query.try_set(String::new()); let _ = set_turn_into_open.try_set(false); let _ = set_block_menu_open.try_set(false); let _ = set_block_menu_anchor.try_set(None); @@ -5040,6 +6208,7 @@ fn App(mount_options: MountOptions) -> impl IntoView { if event.key() == "/" && !event.ctrl_key() && !event.meta_key() && !event.alt_key() { event.prevent_default(); let _ = set_slash_open.try_set(true); + let _ = set_slash_query.try_set(String::new()); let _ = set_turn_into_open.try_set(false); let _ = set_block_menu_open.try_set(false); let _ = set_block_menu_anchor.try_set(None); @@ -5070,6 +6239,19 @@ fn App(mount_options: MountOptions) -> impl IntoView { }; let _ = set_slash_index.try_set(next); } + "Backspace" => { + if !slash_query + .try_get_untracked() + .unwrap_or_default() + .is_empty() + { + event.prevent_default(); + let _ = set_slash_query.try_update(|query| { + query.pop(); + }); + let _ = set_slash_index.try_set(0); + } + } "Enter" => { event.prevent_default(); let action = SLASH_ACTIONS[slash_index.try_get_untracked().unwrap_or(0)].kind; @@ -5083,7 +6265,18 @@ fn App(mount_options: MountOptions) -> impl IntoView { } let _ = set_slash_open.try_set(false); } - _ => {} + _ => { + let key = event.key(); + if key.chars().count() == 1 + && !event.ctrl_key() + && !event.meta_key() + && !event.alt_key() + { + event.prevent_default(); + let _ = set_slash_query.try_update(|query| query.push_str(&key)); + let _ = set_slash_index.try_set(0); + } + } } }); on_cleanup(move || drop(keydown_handle)); @@ -5267,6 +6460,27 @@ fn App(mount_options: MountOptions) -> impl IntoView { } } + if let Some(image) = image_element_from_target(target.clone()) { + let _ = select_mnote_image_node(&image); + set_editor_focused.set(true); + set_block_keyboard_mode.set(false); + set_block_menu_open.set(false); + set_block_menu_anchor.set(None); + set_turn_into_open.set(false); + set_color_menu_open.set(false); + set_more_menu_open.set(false); + set_text_selection_active.set(false); + set_floating_toolbar_anchor.set(None); + set_table_toolbar_open.set(false); + set_table_options_open.set(false); + set_table_overlay_anchor.set(None); + set_table_selection_overlay.set(None); + set_hovered_block.set(None); + set_image_toolbar_anchor.set(image_toolbar_anchor_from_image(&image)); + return; + } + + set_image_toolbar_anchor.set(None); set_editor_focused.set(true); set_block_keyboard_mode.set(false); set_block_menu_open.set(false); @@ -5402,6 +6616,405 @@ fn App(mount_options: MountOptions) -> impl IntoView { set_hovered_block.set(None); } > + {move || { + if !table_toolbar_open.get() || slash_open.get() || block_menu_open.get() || dragging_block_index.get().is_some() { + return ().into_any(); + } + let Some(anchor) = table_overlay_anchor.get() else { + return ().into_any(); + }; + let controls_style = format!( + "left:{:.1}px;top:{:.1}px;width:{:.1}px;height:{:.1}px;", + anchor.left, + anchor.top, + anchor.width, + anchor.height + ); + view! { +
+ {move || { + table_selection_overlay.get().map(|selection| { + view! { +
+ } + }).into_any() + }} + {(0..anchor.rows).map(|index| { + let active = table_selection_overlay.get() + .map(|selection| selection.kind == TableSelectionKind::Row && selection.index == index) + .unwrap_or(false); + view! { + + } + }).collect_view()} + {(0..anchor.cols).map(|index| { + let active = table_selection_overlay.get() + .map(|selection| selection.kind == TableSelectionKind::Column && selection.index == index) + .unwrap_or(false); + view! { + + } + }).collect_view()} +
+ }.into_any() + }} + {move || { + if !table_toolbar_open.get() || slash_open.get() || block_menu_open.get() || dragging_block_index.get().is_some() { + return ().into_any(); + } + view! { +
+ {TABLE_TOOLBAR_ACTIONS.iter().enumerate().map(|(index, action)| { + let action = *action; + let testid = format!("table-toolbar-{}", action.id()); + view! { + <> + {if index == 3 { + view! { }.into_any() + } else { + ().into_any() + }} + + + } + }).collect_view()} + + + {move || { + if !table_options_open.get() { + return ().into_any(); + } + view! { +
+ {TABLE_OPTION_ACTIONS.iter().map(|action| { + let action = *action; + let testid = format!("table-option-{}", action.id()); + view! { + + } + }).collect_view()} +
+ }.into_any() + }} +
+ }.into_any() + }} + {move || { + let Some(anchor) = image_toolbar_anchor.get() else { + return ().into_any(); + }; + if slash_open.get() || block_menu_open.get() || dragging_block_index.get().is_some() { + return ().into_any(); + } + view! { +
+ + + + + + +
+ }.into_any() + }} + {move || { let toolbar_locked = toolbar_overlay_locked( turn_into_open.get(), @@ -5780,6 +7393,29 @@ fn App(mount_options: MountOptions) -> impl IntoView { } }} + {move || { + if block_keyboard_mode.get() + && editor_focused.get() + && !text_selection_active.get() + && !slash_open.get() + && !block_menu_open.get() + { + if let Some(block) = hovered_block.get().or_else(hovered_block_from_selection) { + let outline_top = format!("{}px", (block.top - 2.0).max(0.0)); + let outline_height = format!("{}px", (block.height + 4.0).max(30.0)); + return view! { +
+ }.into_any(); + } + } + ().into_any() + }} + {move || { let active_block = if block_menu_open.get() { block_menu_anchor.get() @@ -6259,21 +7895,26 @@ fn App(mount_options: MountOptions) -> impl IntoView {
{SLASH_ACTIONS .iter() - .filter(|action| !matches!(action.kind, SlashActionKind::Divider | SlashActionKind::AiAssistant | SlashActionKind::AiWrite | SlashActionKind::ContinueWriting | SlashActionKind::Summarize | SlashActionKind::MoreAi)) + .filter(|action| !matches!(action.kind, SlashActionKind::Divider | SlashActionKind::SimpleTable | SlashActionKind::Image | SlashActionKind::Toc | SlashActionKind::AiAssistant | SlashActionKind::AiWrite | SlashActionKind::ContinueWriting | SlashActionKind::Summarize | SlashActionKind::MoreAi)) .map(|action| { let kind = action.kind; let label = action.label; let icon = action.icon; - let shortcut = match action.kind { - SlashActionKind::Paragraph => "Ctrl+Alt+0", - SlashActionKind::Todo => "Ctrl+Shift+5", - SlashActionKind::Heading1 => "Ctrl+Shift+1", - SlashActionKind::Heading2 => "Ctrl+Shift+2", - SlashActionKind::Heading3 => "Ctrl+Shift+3", - SlashActionKind::BulletList => "Ctrl+Shift+6", - SlashActionKind::OrderedList => "Ctrl+Shift+7", - SlashActionKind::CodeBlock => "Ctrl+Alt+-", - _ => "", + let is_current = top_level_block_matches_action(editor, block_index, action.kind); + let shortcut = if is_current { + "✓" + } else { + match action.kind { + SlashActionKind::Paragraph => "Ctrl+Alt+0", + SlashActionKind::Todo => "Ctrl+Shift+5", + SlashActionKind::Heading1 => "Ctrl+Shift+1", + SlashActionKind::Heading2 => "Ctrl+Shift+2", + SlashActionKind::Heading3 => "Ctrl+Shift+3", + SlashActionKind::BulletList => "Ctrl+Shift+6", + SlashActionKind::OrderedList => "Ctrl+Shift+7", + SlashActionKind::CodeBlock => "Ctrl+Alt+-", + _ => "", + } }; let testid = format!("block-transform-item-{}", action.id); let action_menu_label = "块".to_string(); @@ -6281,6 +7922,7 @@ fn App(mount_options: MountOptions) -> impl IntoView { - - - - - - -
- }.into_any() + "页面" + {page_current_marker} + + + + + + + + {move || { + if block_folded_title_open.get() { + view! { +
+ {FOLDED_HEADING_ACTIONS + .iter() + .map(|folded| { + let action = *folded; + let testid = format!("block-transform-folded-heading-{}", action.id); + view! { + + } + }) + .collect_view()} +
+ }.into_any() + } else { + ().into_any() + } + }} + + }.into_any() } else { ().into_any() } @@ -6386,6 +8095,75 @@ fn App(mount_options: MountOptions) -> impl IntoView { view! {
+ {move || { + let query = slash_query.get().trim().to_ascii_lowercase(); + let show_turn_into = !query.is_empty() + && ("zhw".contains(query.as_str()) + || "转换为".contains(query.as_str())); + let show_page = !query.is_empty() + && ("ym".contains(query.as_str()) + || "页面".contains(query.as_str())); + if show_turn_into || show_page { + view! { + <> + {if show_turn_into { + view! { + <> + + + + }.into_any() + } else { + ().into_any() + }} + {if show_page { + view! { + <> + + + + }.into_any() + } else { + ().into_any() + }} + + }.into_any() + } else { + ().into_any() + } + }} {SLASH_ACTIONS.iter().enumerate().map(|(index, action)| { let is_selected = move || slash_index.get() == index; let kind = action.kind; @@ -6409,8 +8187,62 @@ fn App(mount_options: MountOptions) -> impl IntoView { data-active=move || is_selected().to_string() data-testid=testid on:click=move |_| { - apply_feedback_result(set_command_feedback, run_slash_action(editor, kind)); - set_slash_open.set(false); + match run_slash_action(editor, kind) { + Ok(message) => { + set_slash_open.set(false); + set_dirty_count.update(|count| *count += 1); + let (html, snapshot, json_text) = read_editor_snapshot(editor); + set_html_output.set(html.clone()); + set_document_json.set(snapshot.clone()); + set_json_output.set(json_text); + dispatch_change_event(&ChangePayload { + document_id: document_id.get_untracked(), + workspace_id: workspace_id.get_untracked(), + title: title.get_untracked(), + content: snapshot.clone(), + meta: ChangeMetaPayload { + dirty_count: dirty_count.get_untracked(), + editor_focused: editor_focused.get_untracked(), + slash_open: slash_open.get_untracked(), + toolbar_open: toolbar_overlay_locked( + turn_into_open.get_untracked(), + color_menu_open.get_untracked(), + more_menu_open.get_untracked(), + ), + selected_block_index: hovered_block.get_untracked().map(|block| block.index), + revision: revision.get_untracked(), + conflict_detection_key: conflict_detection_key.get_untracked(), + read_only: read_only.get_untracked(), + }, + }); + dispatch_runtime_state( + document_id.get_untracked(), + workspace_id.get_untracked(), + title.get_untracked(), + dirty_count.get_untracked(), + hovered_block.get_untracked(), + editor_focused.get_untracked(), + slash_open.get_untracked(), + turn_into_open.get_untracked(), + color_menu_open.get_untracked(), + more_menu_open.get_untracked(), + read_only.get_untracked(), + ); + match persist_document_state( + &runtime_persisted_identity(document_id, workspace_id), + &title.get_untracked(), + &snapshot, + Some(html), + ) { + Ok(()) => set_command_feedback.set(format!("{message},并已写入本地草稿")), + Err(err) => set_command_feedback.set(format!("{message},但本地保存失败:{err}")), + } + } + Err(err) => { + set_slash_open.set(false); + set_command_feedback.set(format!("命令执行失败:{err}")); + } + } } > @@ -6586,6 +8418,7 @@ fn App(mount_options: MountOptions) -> impl IntoView { false }; if has_text_selection { + set_image_toolbar_anchor.set(None); if !toolbar_locked { set_turn_into_open.set(false); } diff --git a/scripts/task144-e19-indent-list-smoke.js b/scripts/task144-e19-indent-list-smoke.js new file mode 100644 index 00000000..01d306f2 --- /dev/null +++ b/scripts/task144-e19-indent-list-smoke.js @@ -0,0 +1,181 @@ +#!/usr/bin/env node +"use strict"; + +const assert = require("node:assert"); +const fs = require("node:fs"); +const { chromium } = require("playwright"); +const { fetchWithTimeout } = require("./task114-rust-web-gateway-entry-smoke.js"); + +const BASE_URL = (process.env.MNOTE_UI_BASE_URL || "http://127.0.0.1:3000").replace(/\/+$/, ""); +const UI_TIMEOUT_MS = Number(process.env.MNOTE_SMOKE_UI_TIMEOUT_MS || 30_000); +const SCREENSHOT_DIR = process.env.MNOTE_PHASE_E_SCREENSHOT_DIR || "/mnt/Data1T/mnote/tmp/wolai-editor-parity/task144-e19-indent-local-smoke"; + +async function readJsonResponse(response, label) { + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + throw new Error(`${label} 返回了非 JSON 内容: ${text.slice(0, 1200)}`); + } + assert(response.ok, `${label} 请求失败: ${response.status}; body: ${text.slice(0, 1200)}`); + return payload; +} + +async function postTreeCommand(body, label) { + const response = await fetchWithTimeout(`${BASE_URL}/api/tree/commands`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + }); + const payload = await readJsonResponse(response, label); + assert(payload?.result, `${label} 缺少 result`); + return payload.result; +} + +async function createTempDocument() { + const title = `task144-e19-indent-${Date.now().toString(36)}`; + const result = await postTreeCommand({ action: "create", title }, "创建 E19 临时文档"); + assert(result.documentId, "创建 E19 临时文档缺少 documentId"); + assert(result.workspaceId, "创建 E19 临时文档缺少 workspaceId"); + return { documentId: result.documentId, workspaceId: result.workspaceId, title }; +} + +async function purgeTempDocument(target) { + if (!target?.documentId || !target?.workspaceId) return; + await postTreeCommand({ action: "purge", workspaceId: target.workspaceId, documentId: target.documentId }, "清理 E19 临时文档"); +} + +async function loadDocumentContent(target, label) { + const url = `${BASE_URL}/api/documents/content?documentId=${encodeURIComponent(target.documentId)}&workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await fetchWithTimeout(url, { method: "GET" }); + return readJsonResponse(response, label); +} + +async function waitForRuntimeIsland(page) { + const root = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"]').first(); + await root.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const editor = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"] .editor-surface .ProseMirror[contenteditable="true"]').first(); + await editor.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const editorNode = host?.querySelector('.editor-surface .ProseMirror[contenteditable="true"]'); + return host?.getAttribute("data-runtime-editor-status") !== "error" && editorNode instanceof HTMLElement && editorNode.isContentEditable; + }, null, { timeout: UI_TIMEOUT_MS }); + return editor; +} + +async function waitForSavedText(page, text) { + await page.waitForFunction((expected) => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const editor = host?.querySelector('.editor-surface .ProseMirror'); + return host?.getAttribute("data-runtime-editor-status") === "saved" && (editor?.textContent || "").includes(expected); + }, text, { timeout: UI_TIMEOUT_MS }); +} + +async function screenshot(page, name) { + fs.mkdirSync(SCREENSHOT_DIR, { recursive: true }); + await page.screenshot({ path: `${SCREENSHOT_DIR}/${name}.png`, fullPage: true }); +} + +function collectTypes(value, out = []) { + if (Array.isArray(value)) { + value.forEach((item) => collectTypes(item, out)); + return out; + } + if (!value || typeof value !== "object") return out; + if (typeof value.type === "string") out.push(value.type); + collectTypes(value.content, out); + return out; +} + +function hasNestedBulletList(value) { + if (!value || typeof value !== "object") return false; + if (Array.isArray(value)) return value.some(hasNestedBulletList); + if (value.type === "listItem" && Array.isArray(value.content)) { + return value.content.some((item) => item?.type === "bulletList" || item?.type === "orderedList" || item?.type === "taskList"); + } + if ((value.type === "bullet_list_item" || value.type === "numbered_list_item" || value.type === "todo") && Array.isArray(value.children)) { + return value.children.length > 0; + } + return hasNestedBulletList(value.content); +} + +async function main() { + const browser = await chromium.launch({ headless: true }); + const context = await browser.newContext({ viewport: { width: 1440, height: 960 } }); + const page = await context.newPage(); + const saveRequests = []; + page.on("request", (request) => { + if (!request.url().includes("/api/documents/save")) return; + const body = request.postData(); + if (!body) return; + try { + saveRequests.push(JSON.parse(body)); + } catch { + saveRequests.push({ raw: body }); + } + }); + + let target = null; + try { + target = await createTempDocument(); + const url = `${BASE_URL}/documents/${encodeURIComponent(target.documentId)}?workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await page.goto(url, { waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + assert(response, "文档页没有返回响应"); + assert.equal(response.status(), 200, `文档页状态码异常: ${response.status()}`); + + const editor = await waitForRuntimeIsland(page); + await editor.click({ timeout: UI_TIMEOUT_MS }); + await page.keyboard.type("/"); + const slashBullet = page.locator('[data-testid="slash-item-bullet"]').first(); + await slashBullet.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await slashBullet.click({ timeout: UI_TIMEOUT_MS }); + await page.keyboard.type("E19 parent"); + await page.keyboard.press("Enter"); + await page.keyboard.type("E19 child"); + await waitForSavedText(page, "E19 child"); + await screenshot(page, "01-before-indent"); + + await page.keyboard.press("Tab"); + await page.waitForFunction(() => !!document.querySelector('.editor-surface .ProseMirror ul li ul li'), null, { timeout: UI_TIMEOUT_MS }); + await waitForSavedText(page, "E19 child"); + await screenshot(page, "02-after-tab-indent"); + + const lastSave = saveRequests.at(-1); + assert(lastSave?.tiptapDocument, `Tab 缩进后必须走 /api/documents/save 并提交 tiptapDocument: ${JSON.stringify(lastSave).slice(0, 1200)}`); + assert(hasNestedBulletList(lastSave.tiptapDocument), `保存请求里的 Tiptap JSON 必须包含真实嵌套列表结构: ${JSON.stringify(lastSave.tiptapDocument).slice(0, 1600)}`); + assert(collectTypes(lastSave.tiptapDocument).filter((type) => type === "bulletList").length >= 2, "保存请求应包含父/子两层 bulletList"); + + await page.keyboard.press("Shift+Tab"); + await page.waitForFunction(() => !document.querySelector('.editor-surface .ProseMirror ul li ul li'), null, { timeout: UI_TIMEOUT_MS }); + await waitForSavedText(page, "E19 child"); + await screenshot(page, "03-after-shift-tab-outdent"); + + await page.keyboard.press("Tab"); + await page.waitForFunction(() => !!document.querySelector('.editor-surface .ProseMirror ul li ul li'), null, { timeout: UI_TIMEOUT_MS }); + await waitForSavedText(page, "E19 child"); + await page.reload({ waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + await waitForRuntimeIsland(page); + await page.waitForFunction(() => !!document.querySelector('.editor-surface .ProseMirror ul li ul li'), null, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "04-after-reload-nested-list"); + + const contentAfterReload = await loadDocumentContent(target, "读取缩进保存后的正文"); + const savedContent = contentAfterReload?.result?.content; + assert(hasNestedBulletList(savedContent), `刷新后的 /api/documents/content 必须保留嵌套列表真源: ${JSON.stringify(savedContent).slice(0, 1600)}`); + + console.log(JSON.stringify({ ok: true, baseUrl: BASE_URL, documentId: target.documentId, screenshotDir: SCREENSHOT_DIR }, null, 2)); + } finally { + if (target) await purgeTempDocument(target).catch(() => undefined); + await page.close().catch(() => undefined); + await context.close().catch(() => undefined); + await browser.close().catch(() => undefined); + } +} + +if (require.main === module) { + main().catch((error) => { + console.error(error instanceof Error ? error.stack || error.message : String(error)); + process.exit(1); + }); +} diff --git a/scripts/task145-e20-alignment-smoke.js b/scripts/task145-e20-alignment-smoke.js new file mode 100644 index 00000000..1fc73162 --- /dev/null +++ b/scripts/task145-e20-alignment-smoke.js @@ -0,0 +1,179 @@ +#!/usr/bin/env node +"use strict"; + +const assert = require("node:assert"); +const fs = require("node:fs"); +const { chromium } = require("playwright"); +const { fetchWithTimeout } = require("./task114-rust-web-gateway-entry-smoke.js"); + +const BASE_URL = (process.env.MNOTE_UI_BASE_URL || "http://127.0.0.1:3000").replace(/\/+$/, ""); +const UI_TIMEOUT_MS = Number(process.env.MNOTE_SMOKE_UI_TIMEOUT_MS || 30_000); +const SCREENSHOT_DIR = process.env.MNOTE_PHASE_E_SCREENSHOT_DIR || "/mnt/Data1T/mnote/tmp/wolai-editor-parity/task145-e20-alignment-local-smoke"; + +async function readJsonResponse(response, label) { + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + throw new Error(`${label} 返回了非 JSON 内容: ${text.slice(0, 1200)}`); + } + assert(response.ok, `${label} 请求失败: ${response.status}; body: ${text.slice(0, 1200)}`); + return payload; +} + +async function postTreeCommand(body, label) { + const response = await fetchWithTimeout(`${BASE_URL}/api/tree/commands`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + }); + const payload = await readJsonResponse(response, label); + assert(payload?.result, `${label} 缺少 result`); + return payload.result; +} + +async function createTempDocument() { + const title = `task145-e20-align-${Date.now().toString(36)}`; + const result = await postTreeCommand({ action: "create", title }, "创建 E20 临时文档"); + assert(result.documentId, "创建 E20 临时文档缺少 documentId"); + assert(result.workspaceId, "创建 E20 临时文档缺少 workspaceId"); + return { documentId: result.documentId, workspaceId: result.workspaceId, title }; +} + +async function purgeTempDocument(target) { + if (!target?.documentId || !target?.workspaceId) return; + await postTreeCommand({ action: "purge", workspaceId: target.workspaceId, documentId: target.documentId }, "清理 E20 临时文档"); +} + +async function loadDocumentContent(target, label) { + const url = `${BASE_URL}/api/documents/content?documentId=${encodeURIComponent(target.documentId)}&workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await fetchWithTimeout(url, { method: "GET" }); + return readJsonResponse(response, label); +} + +async function waitForRuntimeIsland(page) { + const root = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"]').first(); + await root.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const editor = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"] .editor-surface .ProseMirror[contenteditable="true"]').first(); + await editor.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const editorNode = host?.querySelector('.editor-surface .ProseMirror[contenteditable="true"]'); + return host?.getAttribute("data-runtime-editor-status") !== "error" && editorNode instanceof HTMLElement && editorNode.isContentEditable; + }, null, { timeout: UI_TIMEOUT_MS }); + return editor; +} + +async function waitForSavedText(page, text) { + await page.waitForFunction((expected) => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const editor = host?.querySelector('.editor-surface .ProseMirror'); + return host?.getAttribute("data-runtime-editor-status") === "saved" && (editor?.textContent || "").includes(expected); + }, text, { timeout: UI_TIMEOUT_MS }); +} + +async function screenshot(page, name) { + fs.mkdirSync(SCREENSHOT_DIR, { recursive: true }); + await page.screenshot({ path: `${SCREENSHOT_DIR}/${name}.png`, fullPage: true }); +} + +function findNodeWithTextAlign(value, align = "center") { + if (!value || typeof value !== "object") return null; + if (Array.isArray(value)) return value.map((item) => findNodeWithTextAlign(item, align)).find(Boolean) || null; + if (value.attrs?.textAlign === align || value.props?.textAlign === align) return value; + return findNodeWithTextAlign(value.content, align) || findNodeWithTextAlign(value.children, align) || null; +} + +async function main() { + const browser = await chromium.launch({ headless: true }); + const context = await browser.newContext({ viewport: { width: 1440, height: 960 } }); + const page = await context.newPage(); + const saveRequests = []; + page.on("request", (request) => { + if (!request.url().includes("/api/documents/save")) return; + const body = request.postData(); + if (!body) return; + try { + saveRequests.push(JSON.parse(body)); + } catch { + saveRequests.push({ raw: body }); + } + }); + + let target = null; + try { + target = await createTempDocument(); + const url = `${BASE_URL}/documents/${encodeURIComponent(target.documentId)}?workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await page.goto(url, { waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + assert(response, "文档页没有返回响应"); + assert.equal(response.status(), 200, `文档页状态码异常: ${response.status()}`); + + const editor = await waitForRuntimeIsland(page); + await editor.click({ timeout: UI_TIMEOUT_MS }); + const text = `E20 align center ${Date.now().toString(36)}`; + await page.keyboard.type(text); + await waitForSavedText(page, text); + await screenshot(page, "01-before-align"); + + await page.keyboard.press("Control+Shift+U"); + const layoutOutline = page.locator('[data-testid="block-layout-outline"]').first(); + await layoutOutline.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const outlineStyle = await layoutOutline.evaluate((node) => { + const style = window.getComputedStyle(node); + return { + borderStyle: style.borderTopStyle, + borderColor: style.borderTopColor, + minHeight: style.minHeight, + }; + }); + assert.equal(outlineStyle.borderStyle, "dashed", `Ctrl+Shift+U 后块布局轮廓应为虚线: ${JSON.stringify(outlineStyle)}`); + await screenshot(page, "01a-after-layout-hotkey"); + + const firstBlock = page.locator('.editor-surface .ProseMirror > *').filter({ hasText: text }).first(); + await firstBlock.hover({ timeout: UI_TIMEOUT_MS }); + const handle = page.locator('[data-testid="mnote-leptos-tiptap-handle"]').first(); + await handle.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.locator('[data-testid="block-drag-handle-trigger"]').first().click({ timeout: UI_TIMEOUT_MS }); + const menu = page.locator('[data-testid="block-drag-menu"]').first(); + await menu.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.locator('[data-testid="block-drag-menu-item-align-center"]').first().click({ timeout: UI_TIMEOUT_MS }); + + await page.waitForFunction((expected) => { + const block = Array.from(document.querySelectorAll('.editor-surface .ProseMirror > *')).find((node) => (node.textContent || '').includes(expected)); + return block && window.getComputedStyle(block).textAlign === 'center'; + }, text, { timeout: UI_TIMEOUT_MS }); + await waitForSavedText(page, text); + await screenshot(page, "02-after-align-center"); + + const lastSave = saveRequests.at(-1); + assert(lastSave?.tiptapDocument, `居中后必须提交 tiptapDocument: ${JSON.stringify(lastSave).slice(0, 1200)}`); + assert(findNodeWithTextAlign(lastSave.tiptapDocument, "center"), `保存请求 Tiptap JSON 必须包含 attrs.textAlign=center: ${JSON.stringify(lastSave.tiptapDocument).slice(0, 1600)}`); + + const contentAfterAlign = await loadDocumentContent(target, "读取对齐保存后的正文"); + const savedContent = contentAfterAlign?.result?.content; + assert(findNodeWithTextAlign(savedContent, "center"), `/api/documents/content 必须保留 props.textAlign=center: ${JSON.stringify(savedContent).slice(0, 1600)}`); + + await page.reload({ waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + await waitForRuntimeIsland(page); + await page.waitForFunction((expected) => { + const block = Array.from(document.querySelectorAll('.editor-surface .ProseMirror > *')).find((node) => (node.textContent || '').includes(expected)); + return block && window.getComputedStyle(block).textAlign === 'center'; + }, text, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "03-after-reload-align-center"); + + console.log(JSON.stringify({ ok: true, baseUrl: BASE_URL, documentId: target.documentId, screenshotDir: SCREENSHOT_DIR }, null, 2)); + } finally { + if (target) await purgeTempDocument(target).catch(() => undefined); + await page.close().catch(() => undefined); + await context.close().catch(() => undefined); + await browser.close().catch(() => undefined); + } +} + +if (require.main === module) { + main().catch((error) => { + console.error(error instanceof Error ? error.stack || error.message : String(error)); + process.exit(1); + }); +} diff --git a/scripts/task150-e22-folding-blocks-smoke.js b/scripts/task150-e22-folding-blocks-smoke.js new file mode 100644 index 00000000..e3cfa816 --- /dev/null +++ b/scripts/task150-e22-folding-blocks-smoke.js @@ -0,0 +1,180 @@ +#!/usr/bin/env node +"use strict"; + +const assert = require("node:assert"); +const fs = require("node:fs"); +const { chromium } = require("playwright"); +const { fetchWithTimeout } = require("./task114-rust-web-gateway-entry-smoke.js"); + +const BASE_URL = (process.env.MNOTE_UI_BASE_URL || "http://127.0.0.1:3000").replace(/\/+$/, ""); +const UI_TIMEOUT_MS = Number(process.env.MNOTE_SMOKE_UI_TIMEOUT_MS || 30_000); +const SCREENSHOT_DIR = process.env.MNOTE_PHASE_E_SCREENSHOT_DIR || "/mnt/Data1T/mnote/tmp/wolai-editor-parity/task150-e22-folding-blocks-local-smoke"; + +async function readJsonResponse(response, label) { + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + throw new Error(`${label} 返回了非 JSON 内容: ${text.slice(0, 1200)}`); + } + assert(response.ok, `${label} 请求失败: ${response.status}; body: ${text.slice(0, 1200)}`); + return payload; +} + +async function postTreeCommand(body, label) { + const response = await fetchWithTimeout(`${BASE_URL}/api/tree/commands`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + }); + const payload = await readJsonResponse(response, label); + assert(payload?.result, `${label} 缺少 result`); + return payload.result; +} + +async function createTempDocument() { + const title = `task150-e22-folding-${Date.now().toString(36)}`; + const result = await postTreeCommand({ action: "create", title }, "创建 E22 临时文档"); + assert(result.documentId, "创建 E22 临时文档缺少 documentId"); + assert(result.workspaceId, "创建 E22 临时文档缺少 workspaceId"); + return { documentId: result.documentId, workspaceId: result.workspaceId, title }; +} + +async function purgeTempDocument(target) { + if (!target?.documentId || !target?.workspaceId) return; + await postTreeCommand({ action: "purge", workspaceId: target.workspaceId, documentId: target.documentId }, "清理 E22 临时文档"); +} + +async function loadDocumentContent(target, label) { + const url = `${BASE_URL}/api/documents/content?documentId=${encodeURIComponent(target.documentId)}&workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await fetchWithTimeout(url, { method: "GET" }); + return readJsonResponse(response, label); +} + +async function waitForRuntimeIsland(page) { + const root = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"]').first(); + await root.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const editor = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"] .editor-surface .ProseMirror[contenteditable="true"]').first(); + await editor.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const editorNode = host?.querySelector('.editor-surface .ProseMirror[contenteditable="true"]'); + return host?.getAttribute("data-runtime-editor-status") !== "error" && editorNode instanceof HTMLElement && editorNode.isContentEditable; + }, null, { timeout: UI_TIMEOUT_MS }); + return editor; +} + +async function waitForSavedText(page, text) { + await page.waitForFunction((expected) => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const editor = host?.querySelector('.editor-surface .ProseMirror'); + return host?.getAttribute("data-runtime-editor-status") === "saved" && (editor?.textContent || "").includes(expected); + }, text, { timeout: UI_TIMEOUT_MS }); +} + +async function screenshot(page, name) { + fs.mkdirSync(SCREENSHOT_DIR, { recursive: true }); + await page.screenshot({ path: `${SCREENSHOT_DIR}/${name}.png`, fullPage: true }); +} + +function findCollapsedHeading(value) { + if (!value || typeof value !== "object") return null; + if (Array.isArray(value)) return value.map(findCollapsedHeading).find(Boolean) || null; + const isHeading = value.type === "heading" || value.blockType === "heading"; + const attrs = value.attrs || value.props || {}; + if (isHeading && (attrs.collapsed === true || value.collapsed === true)) return value; + return findCollapsedHeading(value.content) || findCollapsedHeading(value.children) || null; +} + +async function main() { + const browser = await chromium.launch({ headless: true }); + const context = await browser.newContext({ viewport: { width: 1440, height: 960 } }); + const page = await context.newPage(); + const saveRequests = []; + page.on("request", (request) => { + if (!request.url().includes("/api/documents/save")) return; + const body = request.postData(); + if (!body) return; + try { + saveRequests.push(JSON.parse(body)); + } catch { + saveRequests.push({ raw: body }); + } + }); + + let target = null; + try { + target = await createTempDocument(); + const url = `${BASE_URL}/documents/${encodeURIComponent(target.documentId)}?workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await page.goto(url, { waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + assert(response, "文档页没有返回响应"); + assert.equal(response.status(), 200, `文档页状态码异常: ${response.status()}`); + + const editor = await waitForRuntimeIsland(page); + await editor.click({ timeout: UI_TIMEOUT_MS }); + const text = `E22 folded heading ${Date.now().toString(36)}`; + await page.keyboard.type(text); + await waitForSavedText(page, text); + await screenshot(page, "01-before-folded-title"); + + const firstBlock = page.locator('.editor-surface .ProseMirror > *').filter({ hasText: text }).first(); + await firstBlock.hover({ timeout: UI_TIMEOUT_MS }); + await page.locator('[data-testid="mnote-leptos-tiptap-handle"]').first().waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.locator('[data-testid="block-drag-handle-trigger"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.locator('[data-testid="block-drag-menu"]').first().waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.locator('[data-testid="block-drag-menu-item-turn-into"]').first().hover({ timeout: UI_TIMEOUT_MS }); + const transformMenu = page.locator('[data-testid="block-transform-submenu"]').first(); + await transformMenu.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await screenshot(page, "02-transform-submenu-before-e22"); + + const foldedTitle = page.locator('[data-testid="block-transform-item-folded-title"]').first(); + assert.equal(await foldedTitle.isDisabled(), false, "折叠标题不能是 disabled 静态文案"); + await foldedTitle.hover({ timeout: UI_TIMEOUT_MS }); + const foldedTitleSubmenu = page.locator('[data-testid="block-transform-folded-title-submenu"]').first(); + await foldedTitleSubmenu.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const labels = await foldedTitleSubmenu.locator('[data-testid^="block-transform-folded-heading-"]').evaluateAll((nodes) => nodes.map((node) => (node.textContent || "").trim())); + for (const expected of ["折叠主标题", "折叠大标题", "折叠中标题", "折叠小标题"]) { + assert(labels.some((label) => label.includes(expected)), `折叠标题三级菜单缺少 ${expected}: ${labels.join(" | ")}`); + } + await screenshot(page, "03-folded-title-tertiary-submenu"); + + await page.locator('[data-testid="block-transform-folded-heading-1"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction((expected) => { + const heading = Array.from(document.querySelectorAll('.editor-surface .ProseMirror h1')).find((node) => (node.textContent || '').includes(expected)); + return heading instanceof HTMLElement && heading.getAttribute('data-collapsed') === 'true'; + }, text, { timeout: UI_TIMEOUT_MS }); + await waitForSavedText(page, text); + await screenshot(page, "04-after-folded-heading-click"); + + const lastSave = saveRequests.at(-1); + assert(lastSave?.tiptapDocument, `折叠标题后必须提交 tiptapDocument: ${JSON.stringify(lastSave).slice(0, 1200)}`); + assert(findCollapsedHeading(lastSave.tiptapDocument), `保存请求 Tiptap JSON 必须包含 heading attrs.collapsed=true: ${JSON.stringify(lastSave.tiptapDocument).slice(0, 1600)}`); + + const contentAfterFold = await loadDocumentContent(target, "读取折叠标题保存后的正文"); + const savedContent = contentAfterFold?.result?.content; + assert(findCollapsedHeading(savedContent), `/api/documents/content 必须保留折叠标题语义: ${JSON.stringify(savedContent).slice(0, 1600)}`); + + await page.reload({ waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + await waitForRuntimeIsland(page); + await page.waitForFunction((expected) => { + const heading = Array.from(document.querySelectorAll('.editor-surface .ProseMirror h1')).find((node) => (node.textContent || '').includes(expected)); + return heading instanceof HTMLElement && heading.getAttribute('data-collapsed') === 'true'; + }, text, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "05-after-reload-folded-heading"); + + console.log(JSON.stringify({ ok: true, baseUrl: BASE_URL, documentId: target.documentId, screenshotDir: SCREENSHOT_DIR }, null, 2)); + } finally { + if (target) await purgeTempDocument(target).catch(() => undefined); + await page.close().catch(() => undefined); + await context.close().catch(() => undefined); + await browser.close().catch(() => undefined); + } +} + +if (require.main === module) { + main().catch((error) => { + console.error(error instanceof Error ? error.stack || error.message : String(error)); + process.exit(1); + }); +} diff --git a/scripts/task151-e23-table-smoke.js b/scripts/task151-e23-table-smoke.js new file mode 100644 index 00000000..ebc9c924 --- /dev/null +++ b/scripts/task151-e23-table-smoke.js @@ -0,0 +1,439 @@ +#!/usr/bin/env node +"use strict"; + +const assert = require("node:assert"); +const fs = require("node:fs"); +const { chromium } = require("playwright"); +const { fetchWithTimeout } = require("./task114-rust-web-gateway-entry-smoke.js"); + +const BASE_URL = (process.env.MNOTE_UI_BASE_URL || "http://127.0.0.1:3000").replace(/\/+$/, ""); +const UI_TIMEOUT_MS = Number(process.env.MNOTE_SMOKE_UI_TIMEOUT_MS || 30_000); +const SCREENSHOT_DIR = process.env.MNOTE_PHASE_E_SCREENSHOT_DIR || "/mnt/Data1T/mnote/tmp/wolai-editor-parity/task151-e23-table-local-smoke"; + +const TABLE_EXTENSION_SOURCE = "/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/leptos-tiptap/tiptap/src/extensions/tiptap_table.ts"; +const LEPTOS_SPIKE_SOURCE = "/mnt/Data1T/mnote/rust/spikes/leptos-tiptap-spike/src/lib.rs"; + +function assertOfficialTableSelectionBridge() { + const source = fs.readFileSync(TABLE_EXTENSION_SOURCE, "utf8"); + assert( + source.includes("CellSelection.rowSelection") && source.includes("CellSelection.colSelection"), + "E23 表格行/列选择必须复用 @tiptap/pm/tables 的 CellSelection.rowSelection/colSelection", + ); + assert( + !source.includes("setCellSelection"), + "E23 表格行/列选择不能绕过官方 CellSelection 静态选择逻辑", + ); +} + +function assertOfficialTableInsertBridge() { + const source = fs.readFileSync(LEPTOS_SPIKE_SOURCE, "utf8"); + assert( + source.includes("editor.insert_table(4, 3, false)"), + "E23 简单表格必须通过 bridge 调用 Tiptap 官方 insertTable(rows=4, cols=3, withHeaderRow=false)", + ); + assert( + !source.includes(`insert_content( + TiptapContent::json(simple_table_node())`), + "E23 简单表格不能再通过手写 JSON simple_table_node() 走 insert_content", + ); +} + +async function readJsonResponse(response, label) { + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + throw new Error(`${label} 返回了非 JSON 内容: ${text.slice(0, 1200)}`); + } + assert(response.ok, `${label} 请求失败: ${response.status}; body: ${text.slice(0, 1200)}`); + return payload; +} + +async function postTreeCommand(body, label) { + const response = await fetchWithTimeout(`${BASE_URL}/api/tree/commands`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + }); + const payload = await readJsonResponse(response, label); + assert(payload?.result, `${label} 缺少 result`); + return payload.result; +} + +async function createTempDocument() { + const title = `task151-e23-table-${Date.now().toString(36)}`; + const result = await postTreeCommand({ action: "create", title }, "创建 E23 临时文档"); + assert(result.documentId, "创建 E23 临时文档缺少 documentId"); + assert(result.workspaceId, "创建 E23 临时文档缺少 workspaceId"); + return { documentId: result.documentId, workspaceId: result.workspaceId, title }; +} + +async function purgeTempDocument(target) { + if (!target?.documentId || !target?.workspaceId) return; + await postTreeCommand({ action: "purge", workspaceId: target.workspaceId, documentId: target.documentId }, "清理 E23 临时文档"); +} + +async function loadDocumentContent(target, label) { + const url = `${BASE_URL}/api/documents/content?documentId=${encodeURIComponent(target.documentId)}&workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await fetchWithTimeout(url, { method: "GET" }); + return readJsonResponse(response, label); +} + +async function waitForRuntimeIsland(page) { + const root = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"]').first(); + await root.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const editor = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"] .editor-surface .ProseMirror[contenteditable="true"]').first(); + await editor.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const editorNode = host?.querySelector('.editor-surface .ProseMirror[contenteditable="true"]'); + return host?.getAttribute("data-runtime-editor-status") !== "error" && editorNode instanceof HTMLElement && editorNode.isContentEditable; + }, null, { timeout: UI_TIMEOUT_MS }); + return editor; +} + +async function waitForSavedTable(page, minRows = 2, minCells = 4) { + await page.waitForFunction(({ minRows, minCells }) => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const table = host?.querySelector('.editor-surface .ProseMirror table'); + return host?.getAttribute("data-runtime-editor-status") === "saved" + && table instanceof HTMLTableElement + && table.querySelectorAll('tr').length >= minRows + && table.querySelectorAll('td,th').length >= minCells; + }, { minRows, minCells }, { timeout: UI_TIMEOUT_MS }); +} + +async function waitForSavedWithoutTable(page) { + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + return host?.getAttribute("data-runtime-editor-status") === "saved" + && !host.querySelector('.editor-surface .ProseMirror table'); + }, null, { timeout: UI_TIMEOUT_MS }); +} + +async function screenshot(page, name) { + fs.mkdirSync(SCREENSHOT_DIR, { recursive: true }); + await page.screenshot({ path: `${SCREENSHOT_DIR}/${name}.png`, fullPage: true }); +} + +async function clickTableCell(page, { row = 0, col = 0, text = null } = {}) { + const point = await page.locator('.editor-surface .ProseMirror table').first().evaluate((table, options) => { + const rows = Array.from(table.querySelectorAll('tr')); + let cell = null; + if (options.text) { + cell = Array.from(table.querySelectorAll('td,th')).find((candidate) => (candidate.textContent || '').includes(options.text)); + } else { + const rowIndex = options.row < 0 ? rows.length + options.row : options.row; + const targetRow = rows[rowIndex]; + const cells = targetRow ? Array.from(targetRow.querySelectorAll('td,th')) : []; + const colIndex = options.col < 0 ? cells.length + options.col : options.col; + cell = cells[colIndex] || null; + } + if (!(cell instanceof HTMLElement)) return null; + const rect = cell.getBoundingClientRect(); + return { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 }; + }, { row, col, text }); + assert(point, `找不到可点击的表格单元格: ${JSON.stringify({ row, col, text })}`); + await page.mouse.click(point.x, point.y); +} + +function findTable(value) { + if (!value || typeof value !== "object") return null; + if (Array.isArray(value)) return value.map(findTable).find(Boolean) || null; + if (value.type === "table" || value.blockType === "table") return value; + return findTable(value.content) || findTable(value.children) || findTable(value.props?.tiptapTable); +} + +function tableText(value) { + if (!value || typeof value !== "object") return ""; + if (Array.isArray(value)) return value.map(tableText).join(""); + if (typeof value.text === "string") return value.text; + if (typeof value.content === "string") return value.content; + return `${tableText(value.content)}${tableText(value.children)}${tableText(value.props?.tiptapTable)}`; +} + +function countNodeType(value, type) { + if (!value || typeof value !== "object") return 0; + if (Array.isArray(value)) return value.reduce((sum, item) => sum + countNodeType(item, type), 0); + const own = value.type === type || value.blockType === type ? 1 : 0; + return own + countNodeType(value.content, type) + countNodeType(value.children, type) + countNodeType(value.props?.tiptapTable, type); +} + +function findColwidth(value) { + if (!value || typeof value !== "object") return null; + if (Array.isArray(value)) return value.map(findColwidth).find(Boolean) || null; + const colwidth = value.attrs?.colwidth; + if (Array.isArray(colwidth) && colwidth.some((width) => typeof width === "number" && width > 0)) { + return colwidth; + } + return findColwidth(value.content) || findColwidth(value.children) || findColwidth(value.props?.tiptapTable); +} + +async function main() { + const browser = await chromium.launch({ headless: true }); + const context = await browser.newContext({ viewport: { width: 1440, height: 960 } }); + const page = await context.newPage(); + const saveRequests = []; + page.on("request", (request) => { + if (!request.url().includes("/api/documents/save")) return; + const body = request.postData(); + if (!body) return; + try { + saveRequests.push(JSON.parse(body)); + } catch { + saveRequests.push({ raw: body }); + } + }); + + assertOfficialTableSelectionBridge(); + assertOfficialTableInsertBridge(); + + let target = null; + try { + target = await createTempDocument(); + const url = `${BASE_URL}/documents/${encodeURIComponent(target.documentId)}?workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await page.goto(url, { waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + assert(response, "文档页没有返回响应"); + assert.equal(response.status(), 200, `文档页状态码异常: ${response.status()}`); + + const editor = await waitForRuntimeIsland(page); + await editor.click({ timeout: UI_TIMEOUT_MS }); + await page.keyboard.type("/"); + const slash = page.locator('[data-testid="mnote-leptos-tiptap-slash-menu"]').first(); + await slash.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const slashText = await slash.innerText(); + assert(slashText.includes("进阶块列表"), `slash 菜单缺少进阶块列表: ${slashText}`); + assert(slashText.includes("简单表格"), `slash 菜单缺少简单表格: ${slashText}`); + assert(slashText.includes("/jdbg"), `slash 菜单缺少简单表格快捷码 /jdbg: ${slashText}`); + + const simpleTableItem = page.locator('[data-testid="slash-item-simple-table"]').first(); + await simpleTableItem.scrollIntoViewIfNeeded({ timeout: UI_TIMEOUT_MS }); + await screenshot(page, "01-slash-simple-table-entry"); + await simpleTableItem.click({ timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 4, 12); + await screenshot(page, "02-after-simple-table-insert"); + + const tableShape = await page.locator('.editor-surface .ProseMirror table').first().evaluate((table) => ({ + rows: table.querySelectorAll('tr').length, + cells: table.querySelectorAll('td,th').length, + text: table.textContent || "", + })); + assert.equal(tableShape.rows, 4, `简单表格应按 Wolai 基线插入 4 行: ${JSON.stringify(tableShape)}`); + assert.equal(tableShape.cells, 12, `简单表格应按 Wolai 基线插入 3 列共 12 个单元格: ${JSON.stringify(tableShape)}`); + + const firstCell = page.locator('.editor-surface .ProseMirror table td, .editor-surface .ProseMirror table th').first(); + await firstCell.click({ timeout: UI_TIMEOUT_MS }); + const tableToolbar = page.locator('[data-testid="mnote-leptos-tiptap-table-toolbar"]').first(); + await tableToolbar.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const tableControls = page.locator('[data-testid="mnote-leptos-tiptap-table-controls"]').first(); + await tableControls.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + assert(await page.locator('[data-testid="table-row-aux-0"]').first().isVisible(), "表格应显示首行左侧 aux 选择手柄"); + assert(await page.locator('[data-testid="table-col-aux-0"]').first().isVisible(), "表格应显示首列顶部 aux 选择手柄"); + await page.locator('[data-testid="table-row-aux-0"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const selection = document.querySelector('[data-testid="table-selection-overlay"]'); + const table = document.querySelector('.editor-surface .ProseMirror table'); + return selection?.getAttribute('data-selection-kind') === 'row' + && selection?.getAttribute('data-selection-index') === '0' + && table?.querySelectorAll('tr').length === 5 + && table?.querySelectorAll('td,th').length === 15; + }, null, { timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 5, 15); + await page.waitForFunction(() => { + const table = document.querySelector('.editor-surface .ProseMirror table'); + if (!(table instanceof HTMLTableElement)) return false; + const rows = Array.from(table.querySelectorAll('tr')); + const targetRow = rows[0]; + const selectedCells = Array.from(table.querySelectorAll('.selectedCell')); + const targetCells = targetRow ? Array.from(targetRow.querySelectorAll('td,th')) : []; + return targetCells.length > 0 + && selectedCells.length === targetCells.length + && selectedCells.every((cell) => targetCells.includes(cell)); + }, null, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "03a-table-row-aux-insert"); + await page.locator('[data-testid="table-col-aux-0"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const selection = document.querySelector('[data-testid="table-selection-overlay"]'); + const table = document.querySelector('.editor-surface .ProseMirror table'); + return selection?.getAttribute('data-selection-kind') === 'column' + && selection?.getAttribute('data-selection-index') === '0' + && table?.querySelectorAll('tr').length === 5 + && table?.querySelectorAll('td,th').length === 20; + }, null, { timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 5, 20); + await page.waitForFunction(() => { + const table = document.querySelector('.editor-surface .ProseMirror table'); + if (!(table instanceof HTMLTableElement)) return false; + const rows = Array.from(table.querySelectorAll('tr')); + const selectedCells = Array.from(table.querySelectorAll('.selectedCell')); + const firstColumnCells = rows + .map((row) => row.querySelector('td,th')) + .filter((cell) => cell instanceof HTMLTableCellElement); + return firstColumnCells.length === rows.length + && selectedCells.length === firstColumnCells.length + && selectedCells.every((cell) => firstColumnCells.includes(cell)); + }, null, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "03b-table-column-aux-insert"); + await clickTableCell(page, { row: -1, col: 0 }); + for (const testid of [ + "table-toolbar-add-row-after", + "table-toolbar-add-column-after", + "table-toolbar-clear-cell", + "table-toolbar-delete-row", + "table-toolbar-delete-column", + "table-toolbar-delete-table", + "table-toolbar-options", + ]) { + assert(await page.locator(`[data-testid="${testid}"]`).first().isVisible(), `表格 toolbar 缺少 ${testid}`); + } + await screenshot(page, "03-table-toolbar-visible"); + + const initialColumnMetrics = await page.locator('.editor-surface .ProseMirror table td, .editor-surface .ProseMirror table th').first().evaluate((cell) => { + const rect = cell.getBoundingClientRect(); + return { left: rect.left, right: rect.right, top: rect.top, height: rect.height, width: rect.width }; + }); + await page.mouse.move(initialColumnMetrics.right - 2, initialColumnMetrics.top + initialColumnMetrics.height / 2); + await page.waitForFunction(() => { + const editor = document.querySelector('.editor-surface .ProseMirror'); + return editor?.classList.contains('resize-cursor') + || document.querySelectorAll('.editor-surface .ProseMirror .column-resize-handle').length > 0; + }, null, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "03c-table-column-resize-handle"); + await page.mouse.down(); + await page.mouse.move(initialColumnMetrics.right + 86, initialColumnMetrics.top + initialColumnMetrics.height / 2, { steps: 8 }); + await page.mouse.up(); + await page.waitForFunction((initialWidth) => { + const firstCell = document.querySelector('.editor-surface .ProseMirror table td, .editor-surface .ProseMirror table th'); + const firstCol = document.querySelector('.editor-surface .ProseMirror table col'); + const domWidth = firstCell instanceof HTMLElement ? firstCell.getBoundingClientRect().width : 0; + const styleWidth = firstCol instanceof HTMLTableColElement ? parseFloat(firstCol.style.width || '0') : 0; + const attrWidth = firstCell instanceof HTMLElement ? Number((firstCell.getAttribute('data-colwidth') || '').split(',')[0]) : 0; + return domWidth >= initialWidth + 40 || styleWidth >= initialWidth + 40 || attrWidth >= initialWidth + 40; + }, initialColumnMetrics.width, { timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 5, 20); + await screenshot(page, "03d-after-column-resize"); + + await page.keyboard.type("A1"); + await page.locator('[data-testid="table-toolbar-add-row-after"]').first().click({ timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 6, 24); + await page.locator('[data-testid="table-toolbar-add-column-after"]').first().click({ timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 6, 30); + await screenshot(page, "04-after-row-column-ops"); + + await clickTableCell(page, { text: "A1" }); + await page.locator('[data-testid="table-toolbar-clear-cell"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => !(document.querySelector('.editor-surface .ProseMirror table')?.textContent || '').includes('A1'), null, { timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 6, 30); + await screenshot(page, "05-after-clear-cell"); + + await page.locator('[data-testid="table-toolbar-options"]').first().click({ timeout: UI_TIMEOUT_MS }); + const optionsMenu = page.locator('[data-testid="table-toolbar-options-menu"]').first(); + await optionsMenu.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + for (const testid of [ + "table-option-toggle-header-row", + "table-option-toggle-header-column", + "table-option-toggle-hidden-borders", + ]) { + const option = page.locator(`[data-testid="${testid}"]`).first(); + assert(await option.isVisible(), `表格选项菜单缺少 ${testid}`); + assert.equal(await option.getAttribute("role"), "switch", `${testid} 应使用 switch 语义`); + assert.equal(await option.getAttribute("aria-checked"), "false", `${testid} 初始应为关闭态`); + } + await screenshot(page, "06-table-options-menu"); + + await page.locator('[data-testid="table-option-toggle-header-row"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => document.querySelector('[data-testid="table-option-toggle-header-row"]')?.getAttribute('aria-checked') === 'true', null, { timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const table = document.querySelector('.editor-surface .ProseMirror table'); + const firstRowCells = [...(table?.querySelectorAll('tr:first-child > td, tr:first-child > th') || [])]; + return firstRowCells.length >= 4 && firstRowCells.every((cell) => cell.tagName === 'TH'); + }, null, { timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 5, 20); + + await page.locator('[data-testid="table-option-toggle-header-column"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => document.querySelector('[data-testid="table-option-toggle-header-column"]')?.getAttribute('aria-checked') === 'true', null, { timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const rows = [...document.querySelectorAll('.editor-surface .ProseMirror table tr')]; + return rows.length >= 5 && rows.every((row) => row.firstElementChild?.tagName === 'TH'); + }, null, { timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 5, 20); + + await page.locator('[data-testid="table-option-toggle-hidden-borders"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => document.querySelector('[data-testid="table-option-toggle-hidden-borders"]')?.getAttribute('aria-checked') === 'true', null, { timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const table = document.querySelector('.editor-surface .ProseMirror table'); + const firstCell = table?.querySelector('td,th'); + return table?.getAttribute('data-hidden-borders') === 'true' + && firstCell instanceof HTMLElement + && getComputedStyle(firstCell).borderTopWidth === '0px'; + }, null, { timeout: UI_TIMEOUT_MS }); + await waitForSavedTable(page, 5, 20); + await screenshot(page, "07-after-table-options"); + + const lastSave = saveRequests.at(-1); + assert(lastSave?.tiptapDocument, `表格操作后必须提交 tiptapDocument: ${JSON.stringify(lastSave).slice(0, 1200)}`); + const savedTable = findTable(lastSave.tiptapDocument); + assert(savedTable, `保存请求 Tiptap JSON 必须包含 table: ${JSON.stringify(lastSave.tiptapDocument).slice(0, 1600)}`); + assert(!tableText(savedTable).includes("A1"), `清空单元格后保存请求不应保留 A1: ${JSON.stringify(savedTable).slice(0, 1600)}`); + assert.equal(savedTable.attrs?.hiddenBorders, true, `隐藏边框应写入 table attrs.hiddenBorders: ${JSON.stringify(savedTable).slice(0, 1600)}`); + assert(countNodeType(savedTable, "tableHeader") >= 8, `标题行/标题列应写入 tableHeader 节点: ${JSON.stringify(savedTable).slice(0, 1600)}`); + const savedColwidth = findColwidth(savedTable); + assert(savedColwidth?.some((width) => width >= initialColumnMetrics.width + 40), `列宽拖拽应写入保存请求 attrs.colwidth: ${JSON.stringify(savedTable).slice(0, 1600)}`); + + const contentAfterTable = await loadDocumentContent(target, "读取表格保存后的正文"); + const savedContent = contentAfterTable?.result?.content; + const contentTable = findTable(savedContent); + const contentTiptapTable = findTable(contentTable?.props?.tiptapTable) || contentTable; + assert(contentTable, `/api/documents/content 必须保留 table 语义: ${JSON.stringify(savedContent).slice(0, 1600)}`); + assert(!tableText(contentTiptapTable).includes("A1"), `/api/documents/content 清空单元格后不应保留 A1: ${JSON.stringify(savedContent).slice(0, 1600)}`); + assert.equal(contentTiptapTable.attrs?.hiddenBorders, true, `/api/documents/content 应保留隐藏边框属性: ${JSON.stringify(savedContent).slice(0, 1600)}`); + assert(countNodeType(contentTiptapTable, "tableHeader") >= 8, `/api/documents/content 应保留标题行/列语义: ${JSON.stringify(savedContent).slice(0, 1600)}`); + const contentColwidth = findColwidth(contentTiptapTable); + assert(contentColwidth?.some((width) => width >= initialColumnMetrics.width + 40), `/api/documents/content 应保留列宽 attrs.colwidth: ${JSON.stringify(savedContent).slice(0, 1600)}`); + + await page.reload({ waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + await waitForRuntimeIsland(page); + await page.waitForFunction((initialWidth) => { + const table = document.querySelector('.editor-surface .ProseMirror table'); + return table instanceof HTMLTableElement + && table.querySelectorAll('tr').length >= 5 + && table.querySelectorAll('td,th').length >= 20 + && table.getAttribute('data-hidden-borders') === 'true' + && [...table.querySelectorAll('tr:first-child > td, tr:first-child > th')].every((cell) => cell.tagName === 'TH') + && [...table.querySelectorAll('tr')].every((row) => row.firstElementChild?.tagName === 'TH') + && (() => { + const firstCell = table.querySelector('td,th'); + const firstCol = table.querySelector('col'); + const domWidth = firstCell instanceof HTMLElement ? firstCell.getBoundingClientRect().width : 0; + const styleWidth = firstCol instanceof HTMLTableColElement ? parseFloat(firstCol.style.width || firstCol.style.minWidth || '0') : 0; + const attrWidth = firstCell instanceof HTMLElement ? Number((firstCell.getAttribute('data-colwidth') || '').split(',')[0]) : 0; + return domWidth >= initialWidth + 40 || styleWidth >= initialWidth + 40 || attrWidth >= initialWidth + 40; + })() + && !(table.textContent || '').includes('A1'); + }, initialColumnMetrics.width, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "08-after-reload-table-ops"); + + await page.locator('.editor-surface .ProseMirror table td, .editor-surface .ProseMirror table th').first().click({ timeout: UI_TIMEOUT_MS }); + await tableToolbar.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.locator('[data-testid="table-toolbar-delete-table"]').first().click({ timeout: UI_TIMEOUT_MS }); + await waitForSavedWithoutTable(page); + const contentAfterDelete = await loadDocumentContent(target, "读取删除表格后的正文"); + assert(!findTable(contentAfterDelete?.result?.content), `删除表格后 content API 不应保留 table: ${JSON.stringify(contentAfterDelete).slice(0, 1600)}`); + await screenshot(page, "09-after-delete-table"); + + console.log(JSON.stringify({ ok: true, baseUrl: BASE_URL, documentId: target.documentId, screenshotDir: SCREENSHOT_DIR }, null, 2)); + } finally { + if (target) await purgeTempDocument(target).catch(() => undefined); + await page.close().catch(() => undefined); + await context.close().catch(() => undefined); + await browser.close().catch(() => undefined); + } +} + +if (require.main === module) { + main().catch((error) => { + console.error(error instanceof Error ? error.stack || error.message : String(error)); + process.exit(1); + }); +} diff --git a/scripts/task152-e24-image-smoke.js b/scripts/task152-e24-image-smoke.js new file mode 100644 index 00000000..d67678db --- /dev/null +++ b/scripts/task152-e24-image-smoke.js @@ -0,0 +1,280 @@ +#!/usr/bin/env node +"use strict"; + +const assert = require("node:assert"); +const fs = require("node:fs"); +const { chromium } = require("playwright"); +const { fetchWithTimeout } = require("./task114-rust-web-gateway-entry-smoke.js"); + +const BASE_URL = (process.env.MNOTE_UI_BASE_URL || "http://127.0.0.1:3000").replace(/\/+$/, ""); +const UI_TIMEOUT_MS = Number(process.env.MNOTE_SMOKE_UI_TIMEOUT_MS || 30_000); +const SCREENSHOT_DIR = process.env.MNOTE_PHASE_E_SCREENSHOT_DIR || "/mnt/Data1T/mnote/tmp/wolai-editor-parity/task152-e24-image-local-smoke"; +const IMAGE_SRC = "/api/editor/image-placeholder.svg"; +const LEPTOS_SPIKE_SOURCE = "/mnt/Data1T/mnote/rust/spikes/leptos-tiptap-spike/src/lib.rs"; + +function assertOfficialImageBridge() { + const source = fs.readFileSync(LEPTOS_SPIKE_SOURCE, "utf8"); + assert( + source.includes("editor.set_image(TiptapImageResource"), + "E24 图片入口必须通过 leptos-tiptap 的 set_image / TiptapImageResource bridge", + ); + assert( + !source.includes('TiptapContent::json(json!({ "type": "image"'), + "E24 图片入口不能手写 image JSON 绕过 Tiptap setImage", + ); + const imageExtension = fs.readFileSync("/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/leptos-tiptap/tiptap/src/extensions/tiptap_image.ts", "utf8"); + assert( + imageExtension.includes("Image.extend") && imageExtension.includes('"data-align"'), + "E24 图片对齐必须复用 Tiptap Image.extend/addAttributes,而不是在 UI 里伪造样式", + ); +} + +async function readJsonResponse(response, label) { + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + throw new Error(`${label} 返回了非 JSON 内容: ${text.slice(0, 1200)}`); + } + assert(response.ok, `${label} 请求失败: ${response.status}; body: ${text.slice(0, 1200)}`); + return payload; +} + +async function postTreeCommand(body, label) { + const response = await fetchWithTimeout(`${BASE_URL}/api/tree/commands`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + }); + const payload = await readJsonResponse(response, label); + assert(payload?.result, `${label} 缺少 result`); + return payload.result; +} + +async function createTempDocument() { + const title = `task152-e24-image-${Date.now().toString(36)}`; + const result = await postTreeCommand({ action: "create", title }, "创建 E24 临时文档"); + assert(result.documentId, "创建 E24 临时文档缺少 documentId"); + assert(result.workspaceId, "创建 E24 临时文档缺少 workspaceId"); + return { documentId: result.documentId, workspaceId: result.workspaceId, title }; +} + +async function purgeTempDocument(target) { + if (!target?.documentId || !target?.workspaceId) return; + await postTreeCommand({ action: "purge", workspaceId: target.workspaceId, documentId: target.documentId }, "清理 E24 临时文档"); +} + +async function loadDocumentContent(target, label) { + const url = `${BASE_URL}/api/documents/content?documentId=${encodeURIComponent(target.documentId)}&workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await fetchWithTimeout(url, { method: "GET" }); + return readJsonResponse(response, label); +} + +async function waitForRuntimeIsland(page) { + const root = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"]').first(); + await root.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const editor = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"] .editor-surface .ProseMirror[contenteditable="true"]').first(); + await editor.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const editorNode = host?.querySelector('.editor-surface .ProseMirror[contenteditable="true"]'); + return host?.getAttribute("data-runtime-editor-status") !== "error" && editorNode instanceof HTMLElement && editorNode.isContentEditable; + }, null, { timeout: UI_TIMEOUT_MS }); + return editor; +} + +async function waitForSavedImage(page) { + await page.waitForFunction((expectedSrc) => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const image = host?.querySelector('.editor-surface .ProseMirror img[src]'); + return host?.getAttribute("data-runtime-editor-status") === "saved" + && image instanceof HTMLImageElement + && image.getAttribute("src") === expectedSrc + && image.naturalWidth > 0 + && image.naturalHeight > 0; + }, IMAGE_SRC, { timeout: UI_TIMEOUT_MS }); +} + +async function screenshot(page, name) { + fs.mkdirSync(SCREENSHOT_DIR, { recursive: true }); + await page.screenshot({ path: `${SCREENSHOT_DIR}/${name}.png`, fullPage: true }); +} + +async function waitForCondition(label, predicate, timeoutMs = UI_TIMEOUT_MS) { + const started = Date.now(); + let lastError = null; + while (Date.now() - started < timeoutMs) { + try { + if (predicate()) return; + } catch (error) { + lastError = error; + } + await new Promise((resolve) => setTimeout(resolve, 100)); + } + throw new Error(`${label} 超时${lastError ? `: ${lastError.message || lastError}` : ""}`); +} + +function findImage(value) { + if (!value || typeof value !== "object") return null; + if (Array.isArray(value)) return value.map(findImage).find(Boolean) || null; + if (value.type === "image" || value.blockType === "image") return value; + return findImage(value.content) || findImage(value.children) || findImage(value.props?.tiptapImage); +} + +function imageSrc(value) { + const image = findImage(value); + return image?.attrs?.src || image?.props?.src || image?.src || null; +} + +function imageAlign(value) { + const image = findImage(value); + return image?.attrs?.["data-align"] + || image?.props?.["data-align"] + || image?.props?.tiptapImage?.attrs?.["data-align"] + || null; +} + +async function main() { + assertOfficialImageBridge(); + + const browser = await chromium.launch({ headless: true }); + const context = await browser.newContext({ viewport: { width: 1440, height: 960 }, acceptDownloads: true }); + const page = await context.newPage(); + const saveRequests = []; + page.on("request", (request) => { + if (!request.url().includes("/api/documents/save")) return; + const body = request.postData(); + if (!body) return; + try { + saveRequests.push(JSON.parse(body)); + } catch { + saveRequests.push({ raw: body }); + } + }); + + let target = null; + try { + target = await createTempDocument(); + const url = `${BASE_URL}/documents/${encodeURIComponent(target.documentId)}?workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await page.goto(url, { waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + assert(response, "文档页没有返回响应"); + assert.equal(response.status(), 200, `文档页状态码异常: ${response.status()}`); + + const editor = await waitForRuntimeIsland(page); + await editor.click({ timeout: UI_TIMEOUT_MS }); + await page.keyboard.type("/"); + const slash = page.locator('[data-testid="mnote-leptos-tiptap-slash-menu"]').first(); + await slash.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const slashText = await slash.innerText(); + assert(slashText.includes("媒体与附件"), `slash 菜单缺少媒体与附件分组: ${slashText}`); + assert(slashText.includes("图片"), `slash 菜单缺少图片入口: ${slashText}`); + assert(slashText.includes("/tp"), `slash 菜单缺少图片快捷码 /tp: ${slashText}`); + + const imageItem = page.locator('[data-testid="slash-item-image"]').first(); + await imageItem.scrollIntoViewIfNeeded({ timeout: UI_TIMEOUT_MS }); + await screenshot(page, "01-slash-image-entry"); + await imageItem.click({ timeout: UI_TIMEOUT_MS }); + await waitForSavedImage(page); + await screenshot(page, "02-after-image-insert"); + + const image = page.locator('.editor-surface .ProseMirror img[src]').first(); + await image.click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const selectedImage = document.querySelector('.editor-surface .ProseMirror img.ProseMirror-selectednode[src]'); + const toolbar = document.querySelector('[data-testid="image-floating-toolbar"]'); + return selectedImage instanceof HTMLImageElement + && toolbar instanceof HTMLElement + && getComputedStyle(toolbar).display !== "none" + && toolbar.getBoundingClientRect().width > 0 + && toolbar.getBoundingClientRect().height > 0; + }, null, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "03-image-floating-toolbar"); + + const imageToolbar = page.locator('[data-testid="image-floating-toolbar"]').first(); + await imageToolbar.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + for (const testid of [ + "image-align-left", + "image-align-center", + "image-align-right", + "image-download", + "image-delete", + ]) { + await imageToolbar.locator(`[data-testid="${testid}"]`).first().waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + } + assert.equal(await imageToolbar.locator('[data-testid="image-download"]').first().isDisabled(), false, "同源图片下载入口应可用"); + assert.equal(await imageToolbar.locator('[data-testid="image-delete"]').first().isDisabled(), true, "删除图片入口本切片应保持禁用,真实删除保存链后续单列"); + const currentUrlAfterImageSelect = page.url(); + + const downloadPromise = page.waitForEvent("download", { timeout: UI_TIMEOUT_MS }); + await imageToolbar.locator('[data-testid="image-download"]').first().click({ timeout: UI_TIMEOUT_MS }); + const download = await downloadPromise; + const suggestedFilename = download.suggestedFilename(); + assert(suggestedFilename.includes("E24"), `图片下载文件名应来自图片 title/alt: ${suggestedFilename}`); + assert(/\.svg$/i.test(suggestedFilename), `图片下载文件名应保留 SVG 扩展名: ${suggestedFilename}`); + await download.delete().catch(() => undefined); + assert.equal(page.url(), currentUrlAfterImageSelect, "下载图片不应触发页面跳转"); + + await imageToolbar.locator('[data-testid="image-align-center"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const image = document.querySelector('.editor-surface .ProseMirror img[src]'); + const toolbar = document.querySelector('[data-testid="image-floating-toolbar"]'); + return host?.getAttribute("data-runtime-editor-status") === "saved" + && image instanceof HTMLImageElement + && image.getAttribute("data-align") === "center" + && toolbar instanceof HTMLElement + && toolbar.getAttribute("data-align") === "center"; + }, null, { timeout: UI_TIMEOUT_MS }); + await waitForCondition("等待图片对齐保存请求", () => saveRequests.some((request) => imageAlign(request.tiptapDocument) === "center")); + await screenshot(page, "03-image-floating-toolbar"); + + const imgAttrs = await image.evaluate((img) => ({ + src: img.getAttribute("src"), + alt: img.getAttribute("alt"), + title: img.getAttribute("title"), + dataAlign: img.getAttribute("data-align"), + })); + assert.equal(imgAttrs.src, IMAGE_SRC, `图片 src 应保持稳定测试 URL: ${JSON.stringify(imgAttrs)}`); + assert.equal(imgAttrs.alt, "E24 图片占位", `图片 alt 应由 setImage 写入: ${JSON.stringify(imgAttrs)}`); + assert.equal(imgAttrs.title, "E24 图片", `图片 title 应由 setImage 写入: ${JSON.stringify(imgAttrs)}`); + assert.equal(imgAttrs.dataAlign, "center", `图片居中应通过 data-align 写入 DOM: ${JSON.stringify(imgAttrs)}`); + assert.equal(page.url(), currentUrlAfterImageSelect, "点击图片打开工具条不应触发页面跳转"); + + const lastSave = [...saveRequests].reverse().find((request) => imageAlign(request.tiptapDocument) === "center") || saveRequests.at(-1); + assert(lastSave?.tiptapDocument, `图片插入后必须提交 tiptapDocument: ${JSON.stringify(lastSave).slice(0, 1200)}`); + assert.equal(imageSrc(lastSave.tiptapDocument), IMAGE_SRC, `保存请求 Tiptap JSON 必须包含 image attrs.src: ${JSON.stringify(lastSave.tiptapDocument).slice(0, 1600)}`); + assert.equal(imageAlign(lastSave.tiptapDocument), "center", `保存请求 Tiptap JSON 必须保留 image data-align: ${JSON.stringify(lastSave.tiptapDocument).slice(0, 1600)}`); + + const contentAfterImage = await loadDocumentContent(target, "读取图片保存后的正文"); + const savedContent = contentAfterImage?.result?.content; + assert.equal(imageSrc(savedContent), IMAGE_SRC, `/api/documents/content 必须保留 image 真源: ${JSON.stringify(savedContent).slice(0, 1600)}`); + assert.equal(imageAlign(savedContent), "center", `/api/documents/content 必须保留 image data-align: ${JSON.stringify(savedContent).slice(0, 1600)}`); + + await page.reload({ waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + await waitForRuntimeIsland(page); + await page.waitForFunction((expectedSrc) => { + const image = document.querySelector('.editor-surface .ProseMirror img[src]'); + return image instanceof HTMLImageElement + && image.getAttribute("src") === expectedSrc + && image.getAttribute("data-align") === "center" + && image.naturalWidth > 0 + && image.naturalHeight > 0; + }, IMAGE_SRC, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "04-after-reload-image"); + + console.log(JSON.stringify({ ok: true, baseUrl: BASE_URL, documentId: target.documentId, screenshotDir: SCREENSHOT_DIR }, null, 2)); + } finally { + if (target) await purgeTempDocument(target).catch(() => undefined); + await page.close().catch(() => undefined); + await context.close().catch(() => undefined); + await browser.close().catch(() => undefined); + } +} + +if (require.main === module) { + main().catch((error) => { + console.error(error instanceof Error ? error.stack || error.message : String(error)); + process.exit(1); + }); +} diff --git a/scripts/task153-e25-toc-smoke.js b/scripts/task153-e25-toc-smoke.js new file mode 100644 index 00000000..55d08c4d --- /dev/null +++ b/scripts/task153-e25-toc-smoke.js @@ -0,0 +1,233 @@ +#!/usr/bin/env node +"use strict"; + +const assert = require("node:assert"); +const fs = require("node:fs"); +const { chromium } = require("playwright"); +const { fetchWithTimeout } = require("./task114-rust-web-gateway-entry-smoke.js"); + +const BASE_URL = (process.env.MNOTE_UI_BASE_URL || "http://127.0.0.1:3000").replace(/\/+$/, ""); +const UI_TIMEOUT_MS = Number(process.env.MNOTE_SMOKE_UI_TIMEOUT_MS || 30_000); +const SCREENSHOT_DIR = process.env.MNOTE_PHASE_E_SCREENSHOT_DIR || "/mnt/Data1T/mnote/tmp/wolai-editor-parity/task153-e25-toc-local-smoke"; +const TOC_EXTENSION_SOURCE = "/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/leptos-tiptap/tiptap/src/extensions/tiptap_toc_node.ts"; +const LEPTOS_SPIKE_SOURCE = "/mnt/Data1T/mnote/rust/spikes/leptos-tiptap-spike/src/lib.rs"; + +function assertTocBridgeSource() { + const extension = fs.readFileSync(TOC_EXTENSION_SOURCE, "utf8"); + assert(extension.includes('name: "tocNode"'), "E25 必须注册真实 Tiptap tocNode schema"); + assert(extension.includes("Node.create"), "E25 tocNode 必须基于 Tiptap Node.create"); + assert(extension.includes("insertTocNode"), "E25 必须提供 insertTocNode 命令入口"); + assert(extension.includes("editor.state.doc.descendants"), "E25 TOC 列表必须从当前 Tiptap doc headings 派生,不能写死静态列表"); + const spike = fs.readFileSync(LEPTOS_SPIKE_SOURCE, "utf8"); + assert(spike.includes("editor.insert_toc_node(TiptapTocNodeAttrs"), "E25 /toc 必须通过 leptos-tiptap insert_toc_node bridge"); + assert(!spike.includes('TiptapContent::json(json!({ "type": "tocNode"'), "E25 /toc 不能在 spike 中手写 tocNode JSON 绕过 bridge 命令"); +} + +async function readJsonResponse(response, label) { + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + throw new Error(`${label} 返回了非 JSON 内容: ${text.slice(0, 1200)}`); + } + assert(response.ok, `${label} 请求失败: ${response.status}; body: ${text.slice(0, 1200)}`); + return payload; +} + +async function postTreeCommand(body, label) { + const response = await fetchWithTimeout(`${BASE_URL}/api/tree/commands`, { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify(body), + }); + const payload = await readJsonResponse(response, label); + assert(payload?.result, `${label} 缺少 result`); + return payload.result; +} + +async function createTempDocument() { + const title = `task153-e25-toc-${Date.now().toString(36)}`; + const result = await postTreeCommand({ action: "create", title }, "创建 E25 临时文档"); + assert(result.documentId, "创建 E25 临时文档缺少 documentId"); + assert(result.workspaceId, "创建 E25 临时文档缺少 workspaceId"); + return { documentId: result.documentId, workspaceId: result.workspaceId, title }; +} + +async function purgeTempDocument(target) { + if (!target?.documentId || !target?.workspaceId) return; + await postTreeCommand({ action: "purge", workspaceId: target.workspaceId, documentId: target.documentId }, "清理 E25 临时文档"); +} + +async function loadDocumentContent(target, label) { + const url = `${BASE_URL}/api/documents/content?documentId=${encodeURIComponent(target.documentId)}&workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await fetchWithTimeout(url, { method: "GET" }); + return readJsonResponse(response, label); +} + +async function waitForRuntimeIsland(page) { + const root = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"]').first(); + await root.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const editor = page.locator('[data-testid="mnote-leptos-tiptap-island-editor-root"] .editor-surface .ProseMirror[contenteditable="true"]').first(); + await editor.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const editorNode = host?.querySelector('.editor-surface .ProseMirror[contenteditable="true"]'); + return host?.getAttribute("data-runtime-editor-status") !== "error" && editorNode instanceof HTMLElement && editorNode.isContentEditable; + }, null, { timeout: UI_TIMEOUT_MS }); + return editor; +} + +async function screenshot(page, name) { + fs.mkdirSync(SCREENSHOT_DIR, { recursive: true }); + await page.screenshot({ path: `${SCREENSHOT_DIR}/${name}.png`, fullPage: true }); +} + +function findToc(value) { + if (!value || typeof value !== "object") return null; + if (Array.isArray(value)) return value.map(findToc).find(Boolean) || null; + if (value.type === "tocNode" || value.blockType === "toc" || value.type === "toc") return value; + return findToc(value.content) || findToc(value.children) || findToc(value.props?.tiptapTocNode) || findToc(value.props?.tiptapToc); +} + +function tocShowTitle(value) { + const toc = findToc(value); + return toc?.attrs?.showTitle ?? toc?.props?.tiptapTocNode?.attrs?.showTitle ?? null; +} + +async function setHeadingFixture(page) { + await page.evaluate(() => { + const editor = document.querySelector('.editor-surface .ProseMirror')?.editor; + if (!editor) throw new Error('找不到 Tiptap editor'); + editor.commands.setContent({ + type: 'doc', + content: [ + { type: 'heading', attrs: { level: 1 }, content: [{ type: 'text', text: 'E25 主标题' }] }, + { type: 'paragraph', content: [{ type: 'text', text: 'E25 正文' }] }, + { type: 'heading', attrs: { level: 2 }, content: [{ type: 'text', text: 'E25 子标题' }] }, + { type: 'paragraph' }, + ], + }); + editor.commands.focus('end'); + }); + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + return host?.getAttribute("data-runtime-editor-status") !== "error" + && document.querySelectorAll('.editor-surface .ProseMirror h1, .editor-surface .ProseMirror h2').length >= 2; + }, null, { timeout: UI_TIMEOUT_MS }); +} + +async function main() { + assertTocBridgeSource(); + + const browser = await chromium.launch({ headless: true }); + const context = await browser.newContext({ viewport: { width: 1440, height: 960 } }); + const page = await context.newPage(); + const saveRequests = []; + page.on("request", (request) => { + if (!request.url().includes("/api/documents/save")) return; + const body = request.postData(); + if (!body) return; + try { + saveRequests.push(JSON.parse(body)); + } catch { + saveRequests.push({ raw: body }); + } + }); + + let target = null; + try { + target = await createTempDocument(); + const url = `${BASE_URL}/documents/${encodeURIComponent(target.documentId)}?workspaceId=${encodeURIComponent(target.workspaceId)}`; + const response = await page.goto(url, { waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + assert(response, "文档页没有返回响应"); + assert.equal(response.status(), 200, `文档页状态码异常: ${response.status()}`); + + const editor = await waitForRuntimeIsland(page); + await setHeadingFixture(page); + await editor.click({ timeout: UI_TIMEOUT_MS }); + await page.keyboard.type("/"); + const slash = page.locator('[data-testid="mnote-leptos-tiptap-slash-menu"]').first(); + await slash.waitFor({ state: "visible", timeout: UI_TIMEOUT_MS }); + const slashText = await slash.innerText(); + assert(slashText.includes("页面目录"), `slash 菜单缺少页面目录: ${slashText}`); + assert(slashText.includes("/toc"), `slash 菜单缺少页面目录快捷码 /toc: ${slashText}`); + + const tocItem = page.locator('[data-testid="slash-item-toc"]').first(); + await tocItem.scrollIntoViewIfNeeded({ timeout: UI_TIMEOUT_MS }); + await screenshot(page, "01-slash-toc-entry"); + await tocItem.click({ timeout: UI_TIMEOUT_MS }); + + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const toc = document.querySelector('.editor-surface .ProseMirror [data-type="toc-node"]'); + const items = Array.from(document.querySelectorAll('.tiptap-table-of-contents-item')).map((item) => item.textContent || ''); + return host?.getAttribute("data-runtime-editor-status") === "saved" + && toc instanceof HTMLElement + && toc.getAttribute("data-show-title") === "true" + && items.includes("E25 主标题") + && items.includes("E25 子标题"); + }, null, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "02-after-toc-insert"); + + await page.evaluate(() => { + const editor = document.querySelector('.editor-surface .ProseMirror')?.editor; + if (!editor) throw new Error('找不到 Tiptap editor'); + const doc = editor.getJSON(); + const content = Array.isArray(doc.content) ? [...doc.content] : []; + content.push({ type: 'heading', attrs: { level: 2 }, content: [{ type: 'text', text: 'E25 动态标题' }] }); + editor.commands.setContent({ ...doc, content }); + }); + await page.waitForFunction(() => Array.from(document.querySelectorAll('.tiptap-table-of-contents-item')).some((item) => (item.textContent || '').includes('E25 动态标题')), null, { timeout: UI_TIMEOUT_MS }); + + const firstTocItem = page.locator('.tiptap-table-of-contents-item', { hasText: 'E25 主标题' }).first(); + await firstTocItem.click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => window.location.hash.startsWith('#heading-'), null, { timeout: UI_TIMEOUT_MS }); + + await page.locator('[data-testid="toc-show-title-toggle"]').first().click({ timeout: UI_TIMEOUT_MS }); + await page.waitForFunction(() => { + const host = document.querySelector('[data-testid="mnote-leptos-tiptap-island-editor-root"]'); + const toc = document.querySelector('.editor-surface .ProseMirror [data-type="toc-node"]'); + return host?.getAttribute("data-runtime-editor-status") === "saved" + && toc instanceof HTMLElement + && toc.getAttribute("data-show-title") === "false" + && !document.querySelector('.tiptap-table-of-contents-title'); + }, null, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "03-toc-title-hidden"); + + const lastSave = [...saveRequests].reverse().find((request) => findToc(request.tiptapDocument)); + assert(lastSave?.tiptapDocument, `TOC 插入后必须提交 tiptapDocument: ${JSON.stringify(lastSave).slice(0, 1200)}`); + assert.equal(findToc(lastSave.tiptapDocument)?.type, "tocNode", `保存请求必须包含 tocNode: ${JSON.stringify(lastSave.tiptapDocument).slice(0, 1600)}`); + + const contentAfterToc = await loadDocumentContent(target, "读取 TOC 保存后的正文"); + const savedContent = contentAfterToc?.result?.content; + assert(findToc(savedContent), `/api/documents/content 必须保留 tocNode 真源: ${JSON.stringify(savedContent).slice(0, 1600)}`); + assert.equal(tocShowTitle(savedContent), false, `/api/documents/content 必须保留 showTitle=false: ${JSON.stringify(savedContent).slice(0, 1600)}`); + + await page.reload({ waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); + await waitForRuntimeIsland(page); + await page.waitForFunction(() => { + const toc = document.querySelector('.editor-surface .ProseMirror [data-type="toc-node"]'); + const items = Array.from(document.querySelectorAll('.tiptap-table-of-contents-item')).map((item) => item.textContent || ''); + return toc instanceof HTMLElement + && toc.getAttribute("data-show-title") === "false" + && items.includes("E25 主标题") + && items.includes("E25 动态标题"); + }, null, { timeout: UI_TIMEOUT_MS }); + await screenshot(page, "04-after-reload-toc"); + + console.log(JSON.stringify({ ok: true, baseUrl: BASE_URL, documentId: target.documentId, screenshotDir: SCREENSHOT_DIR }, null, 2)); + } finally { + if (target) await purgeTempDocument(target).catch(() => undefined); + await page.close().catch(() => undefined); + await context.close().catch(() => undefined); + await browser.close().catch(() => undefined); + } +} + +if (require.main === module) { + main().catch((error) => { + console.error(error instanceof Error ? error.stack || error.message : String(error)); + process.exit(1); + }); +}