inkpen 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.rubocop.yml +8 -0
- data/.yardopts +11 -0
- data/CLAUDE.md +141 -0
- data/README.md +409 -0
- data/Rakefile +19 -0
- data/app/assets/javascripts/inkpen/controllers/editor_controller.js +2050 -0
- data/app/assets/javascripts/inkpen/controllers/sticky_toolbar_controller.js +667 -0
- data/app/assets/javascripts/inkpen/controllers/toolbar_controller.js +693 -0
- data/app/assets/javascripts/inkpen/export/html.js +637 -0
- data/app/assets/javascripts/inkpen/export/index.js +30 -0
- data/app/assets/javascripts/inkpen/export/markdown.js +697 -0
- data/app/assets/javascripts/inkpen/export/pdf.js +372 -0
- data/app/assets/javascripts/inkpen/extensions/advanced_table.js +640 -0
- data/app/assets/javascripts/inkpen/extensions/block_commands.js +300 -0
- data/app/assets/javascripts/inkpen/extensions/block_gutter.js +338 -0
- data/app/assets/javascripts/inkpen/extensions/callout.js +303 -0
- data/app/assets/javascripts/inkpen/extensions/columns.js +403 -0
- data/app/assets/javascripts/inkpen/extensions/database.js +990 -0
- data/app/assets/javascripts/inkpen/extensions/document_section.js +352 -0
- data/app/assets/javascripts/inkpen/extensions/drag_handle.js +407 -0
- data/app/assets/javascripts/inkpen/extensions/embed.js +629 -0
- data/app/assets/javascripts/inkpen/extensions/enhanced_image.js +566 -0
- data/app/assets/javascripts/inkpen/extensions/export_commands.js +271 -0
- data/app/assets/javascripts/inkpen/extensions/file_attachment.js +593 -0
- data/app/assets/javascripts/inkpen/extensions/inkpen_table/index.js +58 -0
- data/app/assets/javascripts/inkpen/extensions/inkpen_table/inkpen_table.js +638 -0
- data/app/assets/javascripts/inkpen/extensions/inkpen_table/inkpen_table_cell.js +100 -0
- data/app/assets/javascripts/inkpen/extensions/inkpen_table/inkpen_table_header.js +100 -0
- data/app/assets/javascripts/inkpen/extensions/inkpen_table/table_constants.js +152 -0
- data/app/assets/javascripts/inkpen/extensions/inkpen_table/table_helpers.js +254 -0
- data/app/assets/javascripts/inkpen/extensions/inkpen_table/table_menu.js +282 -0
- data/app/assets/javascripts/inkpen/extensions/preformatted.js +239 -0
- data/app/assets/javascripts/inkpen/extensions/section.js +281 -0
- data/app/assets/javascripts/inkpen/extensions/section_title.js +126 -0
- data/app/assets/javascripts/inkpen/extensions/slash_commands.js +439 -0
- data/app/assets/javascripts/inkpen/extensions/table_of_contents.js +474 -0
- data/app/assets/javascripts/inkpen/extensions/toggle_block.js +332 -0
- data/app/assets/javascripts/inkpen/index.js +87 -0
- data/app/assets/stylesheets/inkpen/advanced_table.css +514 -0
- data/app/assets/stylesheets/inkpen/animations.css +626 -0
- data/app/assets/stylesheets/inkpen/block_gutter.css +265 -0
- data/app/assets/stylesheets/inkpen/callout.css +359 -0
- data/app/assets/stylesheets/inkpen/columns.css +314 -0
- data/app/assets/stylesheets/inkpen/database.css +658 -0
- data/app/assets/stylesheets/inkpen/document_section.css +305 -0
- data/app/assets/stylesheets/inkpen/drag_drop.css +220 -0
- data/app/assets/stylesheets/inkpen/editor.css +652 -0
- data/app/assets/stylesheets/inkpen/embed.css +468 -0
- data/app/assets/stylesheets/inkpen/enhanced_image.css +453 -0
- data/app/assets/stylesheets/inkpen/export.css +499 -0
- data/app/assets/stylesheets/inkpen/file_attachment.css +347 -0
- data/app/assets/stylesheets/inkpen/footnotes.css +136 -0
- data/app/assets/stylesheets/inkpen/inkpen_table.css +608 -0
- data/app/assets/stylesheets/inkpen/preformatted.css +215 -0
- data/app/assets/stylesheets/inkpen/search_replace.css +58 -0
- data/app/assets/stylesheets/inkpen/section.css +236 -0
- data/app/assets/stylesheets/inkpen/slash_menu.css +252 -0
- data/app/assets/stylesheets/inkpen/sticky_toolbar.css +314 -0
- data/app/assets/stylesheets/inkpen/toc.css +386 -0
- data/app/assets/stylesheets/inkpen/toggle.css +260 -0
- data/app/helpers/inkpen/editor_helper.rb +114 -0
- data/app/views/inkpen/_editor.html.erb +139 -0
- data/config/importmap.rb +170 -0
- data/docs/.DS_Store +0 -0
- data/docs/CHANGELOG.md +571 -0
- data/docs/FEATURES.md +436 -0
- data/docs/ROADMAP.md +3029 -0
- data/docs/VISION.md +235 -0
- data/docs/extensions/INKPEN_TABLE.md +482 -0
- data/docs/thinking/CORRECTED_NO_VUE.md +756 -0
- data/docs/thinking/EXECUTIVE_SUMMARY.md +403 -0
- data/docs/thinking/INKPEN_CODE_SAMPLES.md +1479 -0
- data/docs/thinking/INKPEN_MASTER_GUIDE.md +891 -0
- data/docs/thinking/README_START_HERE.md +341 -0
- data/lib/inkpen/configuration.rb +175 -0
- data/lib/inkpen/editor.rb +204 -0
- data/lib/inkpen/engine.rb +32 -0
- data/lib/inkpen/extensions/base.rb +109 -0
- data/lib/inkpen/extensions/code_block_syntax.rb +177 -0
- data/lib/inkpen/extensions/document_section.rb +111 -0
- data/lib/inkpen/extensions/forced_document.rb +183 -0
- data/lib/inkpen/extensions/mention.rb +155 -0
- data/lib/inkpen/extensions/preformatted.rb +111 -0
- data/lib/inkpen/extensions/section.rb +139 -0
- data/lib/inkpen/extensions/slash_commands.rb +100 -0
- data/lib/inkpen/extensions/table.rb +182 -0
- data/lib/inkpen/extensions/task_list.rb +145 -0
- data/lib/inkpen/sticky_toolbar.rb +157 -0
- data/lib/inkpen/toolbar.rb +145 -0
- data/lib/inkpen/version.rb +5 -0
- data/lib/inkpen.rb +101 -0
- data/sig/inkpen.rbs +4 -0
- metadata +165 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Inkpen
|
|
4
|
+
##
|
|
5
|
+
# View helpers for rendering Inkpen editors in Rails views.
|
|
6
|
+
#
|
|
7
|
+
# Include this module in your ApplicationHelper or use it directly
|
|
8
|
+
# in views that need Inkpen editors.
|
|
9
|
+
#
|
|
10
|
+
# @example Basic form field
|
|
11
|
+
# <%= inkpen_field :post, :body %>
|
|
12
|
+
#
|
|
13
|
+
# @example With configuration
|
|
14
|
+
# <%= inkpen_field :post, :body,
|
|
15
|
+
# toolbar: :floating,
|
|
16
|
+
# extensions: [:slash_commands, :drag_handle] %>
|
|
17
|
+
#
|
|
18
|
+
# @example Standalone editor
|
|
19
|
+
# <%= inkpen_editor name: "content", value: @content %>
|
|
20
|
+
#
|
|
21
|
+
# @author Nauman Tariq
|
|
22
|
+
# @since 0.1.0
|
|
23
|
+
#
|
|
24
|
+
module EditorHelper
|
|
25
|
+
##
|
|
26
|
+
# Render an Inkpen editor field bound to a model attribute.
|
|
27
|
+
#
|
|
28
|
+
# This helper automatically retrieves the value from the model
|
|
29
|
+
# instance variable if available.
|
|
30
|
+
#
|
|
31
|
+
# @param object_name [Symbol, String] the model name (e.g., :post)
|
|
32
|
+
# @param method [Symbol, String] the attribute name (e.g., :body)
|
|
33
|
+
# @param options [Hash] editor configuration options
|
|
34
|
+
#
|
|
35
|
+
# @option options [String] :value override the attribute value
|
|
36
|
+
# @option options [Symbol] :toolbar toolbar style (:floating, :fixed, :none)
|
|
37
|
+
# @option options [Array<Symbol>] :extensions list of extensions
|
|
38
|
+
# @option options [Hash] :extension_config per-extension config
|
|
39
|
+
# @option options [String] :placeholder placeholder text
|
|
40
|
+
#
|
|
41
|
+
# @return [String] rendered editor HTML
|
|
42
|
+
#
|
|
43
|
+
# @example Basic usage
|
|
44
|
+
# <%= inkpen_field :post, :body %>
|
|
45
|
+
#
|
|
46
|
+
# @example With extensions
|
|
47
|
+
# <%= inkpen_field :post, :body, extensions: [:mentions, :hashtags] %>
|
|
48
|
+
#
|
|
49
|
+
def inkpen_field(object_name, method, options = {})
|
|
50
|
+
value = options.delete(:value)
|
|
51
|
+
|
|
52
|
+
# Try to get value from object if not provided
|
|
53
|
+
if value.nil? && (object = instance_variable_get("@#{object_name}"))
|
|
54
|
+
value = object.public_send(method) if object.respond_to?(method)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
name = "#{object_name}[#{method}]"
|
|
58
|
+
|
|
59
|
+
editor = Inkpen::Editor.new(
|
|
60
|
+
name: name,
|
|
61
|
+
value: value,
|
|
62
|
+
**options
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
render_inkpen_editor(editor)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
# Render an Inkpen editor with explicit configuration.
|
|
70
|
+
#
|
|
71
|
+
# Use this when you need full control over the field name and value,
|
|
72
|
+
# or when not binding to a model.
|
|
73
|
+
#
|
|
74
|
+
# @param name [String] the form field name
|
|
75
|
+
# @param value [String, nil] initial HTML content
|
|
76
|
+
# @param options [Hash] editor configuration options
|
|
77
|
+
#
|
|
78
|
+
# @option options [Symbol] :toolbar toolbar style
|
|
79
|
+
# @option options [Array<Symbol>] :extensions list of extensions
|
|
80
|
+
# @option options [StickyToolbar] :sticky_toolbar sticky toolbar config
|
|
81
|
+
#
|
|
82
|
+
# @return [String] rendered editor HTML
|
|
83
|
+
#
|
|
84
|
+
# @example Basic usage
|
|
85
|
+
# <%= inkpen_editor name: "content", value: @content %>
|
|
86
|
+
#
|
|
87
|
+
# @example Full-featured
|
|
88
|
+
# <%= inkpen_editor name: "post[body]",
|
|
89
|
+
# toolbar: :sticky,
|
|
90
|
+
# extensions: [:slash_commands, :export_commands] %>
|
|
91
|
+
#
|
|
92
|
+
def inkpen_editor(name:, value: nil, **options)
|
|
93
|
+
editor = Inkpen::Editor.new(
|
|
94
|
+
name: name,
|
|
95
|
+
value: value,
|
|
96
|
+
**options
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
render_inkpen_editor(editor)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
private
|
|
103
|
+
|
|
104
|
+
##
|
|
105
|
+
# Render the editor partial.
|
|
106
|
+
#
|
|
107
|
+
# @param editor [Editor] the editor instance
|
|
108
|
+
# @return [String] rendered HTML
|
|
109
|
+
#
|
|
110
|
+
def render_inkpen_editor(editor)
|
|
111
|
+
render partial: "inkpen/editor", locals: { editor: editor }
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
<%# Inkpen Editor Partial %>
|
|
2
|
+
<%# Renders a TipTap-based rich text editor with Stimulus controller %>
|
|
3
|
+
|
|
4
|
+
<div class="inkpen-editor <%= 'inkpen-editor--fixed-toolbar' if editor.toolbar == :fixed %>"
|
|
5
|
+
<%= tag.attributes(editor.data_attributes) %>
|
|
6
|
+
<%= tag.attributes(editor.html_attributes) %>
|
|
7
|
+
style="<%= editor.style_attributes %>">
|
|
8
|
+
|
|
9
|
+
<%
|
|
10
|
+
markdown_toggle_enabled = editor.markdown_mode&.enabled? && editor.markdown_mode.show_toggle
|
|
11
|
+
inline_mode_toggle = markdown_toggle_enabled && editor.toolbar == :fixed && editor.markdown_mode.inline_toggle?
|
|
12
|
+
mode_toggle_markup = nil
|
|
13
|
+
|
|
14
|
+
if markdown_toggle_enabled
|
|
15
|
+
mode_toggle_markup = capture do
|
|
16
|
+
%>
|
|
17
|
+
<div class="inkpen-mode-toggle <%= 'inkpen-mode-toggle--inline' if inline_mode_toggle %>" data-inkpen--editor-target="modeToggle">
|
|
18
|
+
<button type="button"
|
|
19
|
+
data-mode="wysiwyg"
|
|
20
|
+
data-action="click->inkpen--editor#setMode"
|
|
21
|
+
data-shortcut="⌘⇧M"
|
|
22
|
+
class="<%= 'active' if editor.markdown_mode.wysiwyg_default? %>">
|
|
23
|
+
Visual
|
|
24
|
+
</button>
|
|
25
|
+
<button type="button"
|
|
26
|
+
data-mode="markdown"
|
|
27
|
+
data-action="click->inkpen--editor#setMode"
|
|
28
|
+
data-shortcut="⌘⇧M"
|
|
29
|
+
class="<%= 'active' if editor.markdown_mode.markdown_default? %>">
|
|
30
|
+
Markdown
|
|
31
|
+
</button>
|
|
32
|
+
<button type="button"
|
|
33
|
+
data-mode="split"
|
|
34
|
+
data-action="click->inkpen--editor#setMode"
|
|
35
|
+
data-shortcut="⌘⇧V"
|
|
36
|
+
class="<%= 'active' if editor.markdown_mode.split_default? %>">
|
|
37
|
+
Split
|
|
38
|
+
</button>
|
|
39
|
+
</div>
|
|
40
|
+
<%
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
%>
|
|
44
|
+
|
|
45
|
+
<%# Markdown mode toggle (top placement) %>
|
|
46
|
+
<% if markdown_toggle_enabled && !inline_mode_toggle %>
|
|
47
|
+
<%= mode_toggle_markup %>
|
|
48
|
+
<% end %>
|
|
49
|
+
|
|
50
|
+
<%# Hidden input for form submission %>
|
|
51
|
+
<input type="hidden"
|
|
52
|
+
name="<%= editor.input_name %>"
|
|
53
|
+
id="<%= editor.input_id %>"
|
|
54
|
+
value="<%= editor.value %>"
|
|
55
|
+
data-inkpen--editor-target="input">
|
|
56
|
+
|
|
57
|
+
<%# Fixed toolbar - always visible above editor %>
|
|
58
|
+
<% if editor.toolbar == :fixed %>
|
|
59
|
+
<% if inline_mode_toggle %>
|
|
60
|
+
<div class="inkpen-toolbar-row">
|
|
61
|
+
<%= mode_toggle_markup %>
|
|
62
|
+
<div class="inkpen-toolbar inkpen-toolbar--fixed"
|
|
63
|
+
data-controller="inkpen--toolbar"
|
|
64
|
+
data-inkpen--editor-target="toolbar"
|
|
65
|
+
data-inkpen--toolbar-style-value="fixed"
|
|
66
|
+
role="toolbar"
|
|
67
|
+
aria-label="Text formatting">
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
<% else %>
|
|
71
|
+
<div class="inkpen-toolbar inkpen-toolbar--fixed"
|
|
72
|
+
data-controller="inkpen--toolbar"
|
|
73
|
+
data-inkpen--editor-target="toolbar"
|
|
74
|
+
data-inkpen--toolbar-style-value="fixed"
|
|
75
|
+
role="toolbar"
|
|
76
|
+
aria-label="Text formatting">
|
|
77
|
+
</div>
|
|
78
|
+
<% end %>
|
|
79
|
+
<% end %>
|
|
80
|
+
|
|
81
|
+
<%# Markdown editor textarea (hidden by default unless markdown mode) %>
|
|
82
|
+
<% if editor.markdown_mode&.enabled? %>
|
|
83
|
+
<textarea class="inkpen-markdown-editor <%= 'hidden' unless editor.markdown_mode.markdown_default? || editor.markdown_mode.split_default? %>"
|
|
84
|
+
data-inkpen--editor-target="markdownEditor"
|
|
85
|
+
data-label="Markdown"
|
|
86
|
+
placeholder="Write markdown here..."></textarea>
|
|
87
|
+
<% end %>
|
|
88
|
+
|
|
89
|
+
<%# Editor content area - TipTap mounts here %>
|
|
90
|
+
<div class="inkpen-editor__content <%= 'hidden' if editor.markdown_mode&.enabled? && editor.markdown_mode.markdown_default? %>"
|
|
91
|
+
data-inkpen--editor-target="content"
|
|
92
|
+
data-label="Preview"
|
|
93
|
+
data-placeholder="<%= editor.placeholder %>">
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
<%# Floating toolbar container (appears on text selection) %>
|
|
97
|
+
<% if editor.toolbar == :floating %>
|
|
98
|
+
<div class="inkpen-toolbar inkpen-toolbar--floating"
|
|
99
|
+
data-controller="inkpen--toolbar"
|
|
100
|
+
data-inkpen--editor-target="toolbar"
|
|
101
|
+
data-inkpen--toolbar-style-value="floating"
|
|
102
|
+
role="toolbar"
|
|
103
|
+
aria-label="Text formatting">
|
|
104
|
+
</div>
|
|
105
|
+
<% end %>
|
|
106
|
+
|
|
107
|
+
<%# Editor hints toggle — shows available shortcuts %>
|
|
108
|
+
<% if editor.extensions.include?(:mention) || editor.extensions.include?(:slash_commands) %>
|
|
109
|
+
<button type="button"
|
|
110
|
+
class="inkpen-hints-toggle"
|
|
111
|
+
data-action="click->inkpen--editor#toggleHints"
|
|
112
|
+
aria-label="Editor shortcuts"
|
|
113
|
+
title="Editor shortcuts">?</button>
|
|
114
|
+
<div class="inkpen-hints-panel"
|
|
115
|
+
data-inkpen--editor-target="hintsPanel"
|
|
116
|
+
hidden>
|
|
117
|
+
<div class="inkpen-hints-panel__title">Shortcuts</div>
|
|
118
|
+
<% if editor.extensions.include?(:slash_commands) %>
|
|
119
|
+
<div class="inkpen-hints-panel__item">
|
|
120
|
+
<kbd>/</kbd><span>Insert block</span>
|
|
121
|
+
</div>
|
|
122
|
+
<% end %>
|
|
123
|
+
<% if editor.extensions.include?(:mention) %>
|
|
124
|
+
<div class="inkpen-hints-panel__item">
|
|
125
|
+
<kbd>@</kbd><span>Mention user</span>
|
|
126
|
+
</div>
|
|
127
|
+
<% end %>
|
|
128
|
+
<div class="inkpen-hints-panel__item">
|
|
129
|
+
<kbd>⌘B</kbd><span>Bold</span>
|
|
130
|
+
</div>
|
|
131
|
+
<div class="inkpen-hints-panel__item">
|
|
132
|
+
<kbd>⌘I</kbd><span>Italic</span>
|
|
133
|
+
</div>
|
|
134
|
+
<div class="inkpen-hints-panel__item">
|
|
135
|
+
<kbd>⌘K</kbd><span>Link</span>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
<% end %>
|
|
139
|
+
</div>
|
data/config/importmap.rb
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Inkpen importmap configuration
|
|
2
|
+
# These pins are automatically added to the host app's importmap
|
|
3
|
+
# Using esm.sh for browser-compatible builds (no Node.js polyfills needed)
|
|
4
|
+
|
|
5
|
+
# ProseMirror core (TipTap's underlying editor framework)
|
|
6
|
+
pin "prosemirror-state", to: "https://esm.sh/prosemirror-state@1.4.3"
|
|
7
|
+
pin "prosemirror-view", to: "https://esm.sh/prosemirror-view@1.33.8"
|
|
8
|
+
pin "prosemirror-model", to: "https://esm.sh/prosemirror-model@1.22.3"
|
|
9
|
+
pin "prosemirror-transform", to: "https://esm.sh/prosemirror-transform@1.9.0"
|
|
10
|
+
pin "prosemirror-commands", to: "https://esm.sh/prosemirror-commands@1.5.2"
|
|
11
|
+
pin "prosemirror-keymap", to: "https://esm.sh/prosemirror-keymap@1.2.2"
|
|
12
|
+
pin "prosemirror-history", to: "https://esm.sh/prosemirror-history@1.4.1"
|
|
13
|
+
pin "prosemirror-dropcursor", to: "https://esm.sh/prosemirror-dropcursor@1.8.1"
|
|
14
|
+
pin "prosemirror-gapcursor", to: "https://esm.sh/prosemirror-gapcursor@1.3.2"
|
|
15
|
+
pin "prosemirror-schema-list", to: "https://esm.sh/prosemirror-schema-list@1.4.1"
|
|
16
|
+
pin "prosemirror-inputrules", to: "https://esm.sh/prosemirror-inputrules@1.4.0"
|
|
17
|
+
pin "prosemirror-tables", to: "https://esm.sh/prosemirror-tables@1.4.0"
|
|
18
|
+
pin "rope-sequence", to: "https://esm.sh/rope-sequence@1.3.4"
|
|
19
|
+
pin "orderedmap", to: "https://esm.sh/orderedmap@2.1.1"
|
|
20
|
+
pin "w3c-keyname", to: "https://esm.sh/w3c-keyname@2.2.8"
|
|
21
|
+
pin "crelt", to: "https://esm.sh/crelt@1.0.6"
|
|
22
|
+
|
|
23
|
+
# TipTap core
|
|
24
|
+
pin "@tiptap/core", to: "https://esm.sh/@tiptap/core@2.10.3"
|
|
25
|
+
pin "@tiptap/pm/state", to: "https://esm.sh/@tiptap/pm@2.10.3/state"
|
|
26
|
+
pin "@tiptap/pm/view", to: "https://esm.sh/@tiptap/pm@2.10.3/view"
|
|
27
|
+
pin "@tiptap/pm/model", to: "https://esm.sh/@tiptap/pm@2.10.3/model"
|
|
28
|
+
pin "@tiptap/pm/transform", to: "https://esm.sh/@tiptap/pm@2.10.3/transform"
|
|
29
|
+
pin "@tiptap/pm/commands", to: "https://esm.sh/@tiptap/pm@2.10.3/commands"
|
|
30
|
+
pin "@tiptap/pm/keymap", to: "https://esm.sh/@tiptap/pm@2.10.3/keymap"
|
|
31
|
+
pin "@tiptap/pm/history", to: "https://esm.sh/@tiptap/pm@2.10.3/history"
|
|
32
|
+
pin "@tiptap/pm/dropcursor", to: "https://esm.sh/@tiptap/pm@2.10.3/dropcursor"
|
|
33
|
+
pin "@tiptap/pm/gapcursor", to: "https://esm.sh/@tiptap/pm@2.10.3/gapcursor"
|
|
34
|
+
pin "@tiptap/pm/schema-list", to: "https://esm.sh/@tiptap/pm@2.10.3/schema-list"
|
|
35
|
+
pin "@tiptap/pm/inputrules", to: "https://esm.sh/@tiptap/pm@2.10.3/inputrules"
|
|
36
|
+
pin "@tiptap/pm/tables", to: "https://esm.sh/@tiptap/pm@2.10.3/tables"
|
|
37
|
+
|
|
38
|
+
# TipTap starter kit (includes common extensions)
|
|
39
|
+
pin "@tiptap/starter-kit", to: "https://esm.sh/@tiptap/starter-kit@2.10.3"
|
|
40
|
+
|
|
41
|
+
# TipTap extensions
|
|
42
|
+
pin "@tiptap/extension-document", to: "https://esm.sh/@tiptap/extension-document@2.10.3"
|
|
43
|
+
pin "@tiptap/extension-paragraph", to: "https://esm.sh/@tiptap/extension-paragraph@2.10.3"
|
|
44
|
+
pin "@tiptap/extension-text", to: "https://esm.sh/@tiptap/extension-text@2.10.3"
|
|
45
|
+
pin "@tiptap/extension-bold", to: "https://esm.sh/@tiptap/extension-bold@2.10.3"
|
|
46
|
+
pin "@tiptap/extension-italic", to: "https://esm.sh/@tiptap/extension-italic@2.10.3"
|
|
47
|
+
pin "@tiptap/extension-strike", to: "https://esm.sh/@tiptap/extension-strike@2.10.3"
|
|
48
|
+
pin "@tiptap/extension-heading", to: "https://esm.sh/@tiptap/extension-heading@2.10.3"
|
|
49
|
+
pin "@tiptap/extension-bullet-list", to: "https://esm.sh/@tiptap/extension-bullet-list@2.10.3"
|
|
50
|
+
pin "@tiptap/extension-ordered-list", to: "https://esm.sh/@tiptap/extension-ordered-list@2.10.3"
|
|
51
|
+
pin "@tiptap/extension-list-item", to: "https://esm.sh/@tiptap/extension-list-item@2.10.3"
|
|
52
|
+
pin "@tiptap/extension-blockquote", to: "https://esm.sh/@tiptap/extension-blockquote@2.10.3"
|
|
53
|
+
pin "@tiptap/extension-code-block", to: "https://esm.sh/@tiptap/extension-code-block@2.10.3"
|
|
54
|
+
pin "@tiptap/extension-code", to: "https://esm.sh/@tiptap/extension-code@2.10.3"
|
|
55
|
+
pin "@tiptap/extension-horizontal-rule", to: "https://esm.sh/@tiptap/extension-horizontal-rule@2.10.3"
|
|
56
|
+
pin "@tiptap/extension-hard-break", to: "https://esm.sh/@tiptap/extension-hard-break@2.10.3"
|
|
57
|
+
pin "@tiptap/extension-history", to: "https://esm.sh/@tiptap/extension-history@2.10.3"
|
|
58
|
+
pin "@tiptap/extension-dropcursor", to: "https://esm.sh/@tiptap/extension-dropcursor@2.10.3"
|
|
59
|
+
pin "@tiptap/extension-gapcursor", to: "https://esm.sh/@tiptap/extension-gapcursor@2.10.3"
|
|
60
|
+
pin "@tiptap/extension-link", to: "https://esm.sh/@tiptap/extension-link@2.10.3"
|
|
61
|
+
|
|
62
|
+
# Link extension dependencies
|
|
63
|
+
pin "linkifyjs", to: "https://esm.sh/linkifyjs@4.1.3"
|
|
64
|
+
pin "@tiptap/extension-placeholder", to: "https://esm.sh/@tiptap/extension-placeholder@2.10.3"
|
|
65
|
+
pin "@tiptap/extension-table", to: "https://esm.sh/@tiptap/extension-table@2.10.3"
|
|
66
|
+
pin "@tiptap/extension-table-row", to: "https://esm.sh/@tiptap/extension-table-row@2.10.3"
|
|
67
|
+
pin "@tiptap/extension-table-cell", to: "https://esm.sh/@tiptap/extension-table-cell@2.10.3"
|
|
68
|
+
pin "@tiptap/extension-table-header", to: "https://esm.sh/@tiptap/extension-table-header@2.10.3"
|
|
69
|
+
pin "@tiptap/extension-image", to: "https://esm.sh/@tiptap/extension-image@2.10.3"
|
|
70
|
+
|
|
71
|
+
# Task List extension
|
|
72
|
+
pin "@tiptap/extension-task-list", to: "https://esm.sh/@tiptap/extension-task-list@2.10.3"
|
|
73
|
+
pin "@tiptap/extension-task-item", to: "https://esm.sh/@tiptap/extension-task-item@2.10.3"
|
|
74
|
+
|
|
75
|
+
# Mention extension
|
|
76
|
+
pin "@tiptap/extension-mention", to: "https://esm.sh/@tiptap/extension-mention@2.10.3"
|
|
77
|
+
pin "@tiptap/suggestion", to: "https://esm.sh/@tiptap/suggestion@2.10.3"
|
|
78
|
+
|
|
79
|
+
# Syntax highlighting for code blocks
|
|
80
|
+
pin "@tiptap/extension-code-block-lowlight", to: "https://esm.sh/@tiptap/extension-code-block-lowlight@2.10.3"
|
|
81
|
+
|
|
82
|
+
# Typography extension (markdown shortcuts, smart quotes)
|
|
83
|
+
pin "@tiptap/extension-typography", to: "https://esm.sh/@tiptap/extension-typography@2.10.3"
|
|
84
|
+
|
|
85
|
+
# Text formatting marks
|
|
86
|
+
pin "@tiptap/extension-highlight", to: "https://esm.sh/@tiptap/extension-highlight@2.10.3"
|
|
87
|
+
pin "@tiptap/extension-underline", to: "https://esm.sh/@tiptap/extension-underline@2.10.3"
|
|
88
|
+
pin "@tiptap/extension-subscript", to: "https://esm.sh/@tiptap/extension-subscript@2.10.3"
|
|
89
|
+
pin "@tiptap/extension-superscript", to: "https://esm.sh/@tiptap/extension-superscript@2.10.3"
|
|
90
|
+
|
|
91
|
+
# YouTube video embeds
|
|
92
|
+
pin "@tiptap/extension-youtube", to: "https://esm.sh/@tiptap/extension-youtube@2.10.3"
|
|
93
|
+
|
|
94
|
+
# Character count
|
|
95
|
+
pin "@tiptap/extension-character-count", to: "https://esm.sh/@tiptap/extension-character-count@2.10.3"
|
|
96
|
+
|
|
97
|
+
# BubbleMenu (floating toolbar on text selection)
|
|
98
|
+
pin "@tiptap/extension-bubble-menu", to: "https://esm.sh/@tiptap/extension-bubble-menu@2.10.3"
|
|
99
|
+
|
|
100
|
+
# FloatingMenu (toolbar on empty lines)
|
|
101
|
+
pin "@tiptap/extension-floating-menu", to: "https://esm.sh/@tiptap/extension-floating-menu@2.10.3"
|
|
102
|
+
|
|
103
|
+
# Tippy.js - required by BubbleMenu for positioning
|
|
104
|
+
pin "tippy.js", to: "https://esm.sh/tippy.js@6.3.7"
|
|
105
|
+
pin "@popperjs/core", to: "https://esm.sh/@popperjs/core@2.11.8"
|
|
106
|
+
|
|
107
|
+
# Lowlight with bundled dependencies
|
|
108
|
+
pin "lowlight", to: "https://esm.sh/lowlight@3?bundle"
|
|
109
|
+
|
|
110
|
+
# Highlight.js core and common languages for syntax highlighting
|
|
111
|
+
pin "highlight.js/lib/core", to: "https://esm.sh/highlight.js@11.9.0/lib/core"
|
|
112
|
+
pin "highlight.js/lib/languages/javascript", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/javascript"
|
|
113
|
+
pin "highlight.js/lib/languages/typescript", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/typescript"
|
|
114
|
+
pin "highlight.js/lib/languages/ruby", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/ruby"
|
|
115
|
+
pin "highlight.js/lib/languages/python", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/python"
|
|
116
|
+
pin "highlight.js/lib/languages/css", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/css"
|
|
117
|
+
pin "highlight.js/lib/languages/xml", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/xml"
|
|
118
|
+
pin "highlight.js/lib/languages/json", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/json"
|
|
119
|
+
pin "highlight.js/lib/languages/bash", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/bash"
|
|
120
|
+
pin "highlight.js/lib/languages/sql", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/sql"
|
|
121
|
+
pin "highlight.js/lib/languages/markdown", to: "https://esm.sh/highlight.js@11.9.0/lib/languages/markdown"
|
|
122
|
+
|
|
123
|
+
# Emoji replacer extension (auto-replaces :emoji: shortcodes)
|
|
124
|
+
pin "@tiptap-extend/emoji-replacer", to: "https://esm.sh/@tiptap-extend/emoji-replacer@2.1.6?deps=@tiptap/core@2.10.3"
|
|
125
|
+
|
|
126
|
+
# Search and Replace extension
|
|
127
|
+
pin "@sereneinserenade/tiptap-search-and-replace", to: "https://esm.sh/@sereneinserenade/tiptap-search-and-replace@0.1.1"
|
|
128
|
+
|
|
129
|
+
# Footnotes extension
|
|
130
|
+
pin "tiptap-footnotes", to: "https://esm.sh/tiptap-footnotes@2.0.4?deps=@tiptap/core@2.10.3,@tiptap/pm@2.10.3"
|
|
131
|
+
|
|
132
|
+
# Inkpen controllers and extensions
|
|
133
|
+
pin "inkpen", to: "inkpen/index.js"
|
|
134
|
+
pin_all_from File.expand_path("../app/assets/javascripts/inkpen", __dir__), under: "inkpen"
|
|
135
|
+
|
|
136
|
+
# Inkpen custom extensions - explicit pins required for nested directories
|
|
137
|
+
pin "inkpen/extensions/section", to: "inkpen/extensions/section.js"
|
|
138
|
+
pin "inkpen/extensions/preformatted", to: "inkpen/extensions/preformatted.js"
|
|
139
|
+
pin "inkpen/extensions/slash_commands", to: "inkpen/extensions/slash_commands.js"
|
|
140
|
+
pin "inkpen/extensions/block_gutter", to: "inkpen/extensions/block_gutter.js"
|
|
141
|
+
pin "inkpen/extensions/drag_handle", to: "inkpen/extensions/drag_handle.js"
|
|
142
|
+
pin "inkpen/extensions/toggle_block", to: "inkpen/extensions/toggle_block.js"
|
|
143
|
+
pin "inkpen/extensions/columns", to: "inkpen/extensions/columns.js"
|
|
144
|
+
pin "inkpen/extensions/callout", to: "inkpen/extensions/callout.js"
|
|
145
|
+
pin "inkpen/extensions/block_commands", to: "inkpen/extensions/block_commands.js"
|
|
146
|
+
pin "inkpen/extensions/enhanced_image", to: "inkpen/extensions/enhanced_image.js"
|
|
147
|
+
pin "inkpen/extensions/file_attachment", to: "inkpen/extensions/file_attachment.js"
|
|
148
|
+
pin "inkpen/extensions/embed", to: "inkpen/extensions/embed.js"
|
|
149
|
+
pin "inkpen/extensions/advanced_table", to: "inkpen/extensions/advanced_table.js"
|
|
150
|
+
pin "inkpen/extensions/table_of_contents", to: "inkpen/extensions/table_of_contents.js"
|
|
151
|
+
pin "inkpen/extensions/database", to: "inkpen/extensions/database.js"
|
|
152
|
+
pin "inkpen/extensions/document_section", to: "inkpen/extensions/document_section.js"
|
|
153
|
+
pin "inkpen/extensions/section_title", to: "inkpen/extensions/section_title.js"
|
|
154
|
+
pin "inkpen/extensions/export_commands", to: "inkpen/extensions/export_commands.js"
|
|
155
|
+
pin "inkpen/extensions/content_embed", to: "inkpen/extensions/content_embed.js"
|
|
156
|
+
|
|
157
|
+
# Export modules - explicit pins for relative import resolution
|
|
158
|
+
pin "inkpen/export", to: "inkpen/export/index.js"
|
|
159
|
+
pin "inkpen/export/markdown", to: "inkpen/export/markdown.js"
|
|
160
|
+
pin "inkpen/export/html", to: "inkpen/export/html.js"
|
|
161
|
+
pin "inkpen/export/pdf", to: "inkpen/export/pdf.js"
|
|
162
|
+
|
|
163
|
+
# InkpenTable module - explicit pins for all sub-modules
|
|
164
|
+
pin "inkpen/extensions/inkpen_table", to: "inkpen/extensions/inkpen_table/index.js"
|
|
165
|
+
pin "inkpen/extensions/inkpen_table/inkpen_table", to: "inkpen/extensions/inkpen_table/inkpen_table.js"
|
|
166
|
+
pin "inkpen/extensions/inkpen_table/inkpen_table_cell", to: "inkpen/extensions/inkpen_table/inkpen_table_cell.js"
|
|
167
|
+
pin "inkpen/extensions/inkpen_table/inkpen_table_header", to: "inkpen/extensions/inkpen_table/inkpen_table_header.js"
|
|
168
|
+
pin "inkpen/extensions/inkpen_table/table_menu", to: "inkpen/extensions/inkpen_table/table_menu.js"
|
|
169
|
+
pin "inkpen/extensions/inkpen_table/table_helpers", to: "inkpen/extensions/inkpen_table/table_helpers.js"
|
|
170
|
+
pin "inkpen/extensions/inkpen_table/table_constants", to: "inkpen/extensions/inkpen_table/table_constants.js"
|
data/docs/.DS_Store
ADDED
|
Binary file
|