plutonium 0.15.23 → 0.15.24
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 +4 -4
- data/app/assets/plutonium.css +1 -1
- data/app/assets/plutonium.js +3524 -261
- data/app/assets/plutonium.js.map +4 -4
- data/app/assets/plutonium.min.js +65 -6
- data/app/assets/plutonium.min.js.map +4 -4
- data/lib/plutonium/ui/display/base.rb +2 -2
- data/lib/plutonium/ui/display/component/{association_field.rb → association.rb} +1 -1
- data/lib/plutonium/ui/display/component/markdown.rb +52 -0
- data/lib/plutonium/ui/form/base.rb +2 -2
- data/lib/plutonium/ui/form/components/{easymde_input.rb → easymde.rb} +1 -1
- data/lib/plutonium/ui/form/components/{flatpickr_input.rb → flatpickr.rb} +1 -1
- data/lib/plutonium/version.rb +1 -1
- data/package-lock.json +18 -8
- data/package.json +2 -1
- data/src/css/easymde.css +105 -28
- data/src/css/slim_select.css +6 -0
- data/src/js/controllers/easymde_controller.js +39 -1
- data/src/js/controllers/flatpickr_controller.js +6 -0
- data/src/js/controllers/slim_select_controller.js +6 -0
- data/tailwind.options.js +35 -33
- metadata +6 -6
- data/lib/plutonium/ui/display/component/markdown_field.rb +0 -33
@@ -8,11 +8,11 @@ module Plutonium
|
|
8
8
|
|
9
9
|
class Builder < Builder
|
10
10
|
def association_tag(**, &)
|
11
|
-
create_component(Plutonium::UI::Display::Component::
|
11
|
+
create_component(Plutonium::UI::Display::Component::Association, :association, **, &)
|
12
12
|
end
|
13
13
|
|
14
14
|
def markdown_tag(**, &)
|
15
|
-
create_component(Plutonium::UI::Display::Component::
|
15
|
+
create_component(Plutonium::UI::Display::Component::Markdown, :markdown, **, &)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -4,7 +4,7 @@ module Plutonium
|
|
4
4
|
module UI
|
5
5
|
module Display
|
6
6
|
module Component
|
7
|
-
class
|
7
|
+
class Association < Phlexi::Display::Components::Association
|
8
8
|
include Plutonium::UI::Component::Methods
|
9
9
|
|
10
10
|
def render_value(value)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "redcarpet"
|
4
|
+
|
5
|
+
module Plutonium
|
6
|
+
module UI
|
7
|
+
module Display
|
8
|
+
module Component
|
9
|
+
class Markdown < Phlexi::Display::Components::Base
|
10
|
+
include Phlexi::Display::Components::Concerns::DisplaysValue
|
11
|
+
|
12
|
+
RENDERER = Redcarpet::Markdown.new(
|
13
|
+
Redcarpet::Render::HTML.new(
|
14
|
+
safe_links_only: true, with_toc_data: true, hard_wrap: true,
|
15
|
+
link_attributes: {rel: :nofollow, target: :_blank}
|
16
|
+
),
|
17
|
+
autolink: true, tables: true, no_intra_emphasis: true,
|
18
|
+
fenced_code_blocks: true, disable_indented_code_blocks: true,
|
19
|
+
strikethrough: true, space_after_headers: true, superscript: true,
|
20
|
+
footnotes: true, highlight: true, underline: true
|
21
|
+
)
|
22
|
+
|
23
|
+
def render_value(value)
|
24
|
+
article(**attributes) {
|
25
|
+
unsafe_raw(render_markdown(value))
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def render_markdown(value)
|
32
|
+
RENDERER.render(
|
33
|
+
ActionController::Base.helpers.sanitize(
|
34
|
+
value,
|
35
|
+
tags: %w[strong em sub sup details summary],
|
36
|
+
attributes: []
|
37
|
+
)
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
def normalize_value(value)
|
42
|
+
if value.respond_to?(:to_plain_text)
|
43
|
+
value.to_plain_text
|
44
|
+
else
|
45
|
+
value.to_s
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -10,7 +10,7 @@ module Plutonium
|
|
10
10
|
include Plutonium::UI::Form::Options::InferredTypes
|
11
11
|
|
12
12
|
def easymde_tag(**, &)
|
13
|
-
create_component(Plutonium::UI::Form::Components::
|
13
|
+
create_component(Plutonium::UI::Form::Components::Easymde, :easymde, **, &)
|
14
14
|
end
|
15
15
|
alias_method :markdown_tag, :easymde_tag
|
16
16
|
|
@@ -21,7 +21,7 @@ module Plutonium
|
|
21
21
|
alias_method :select_tag, :slim_select_tag
|
22
22
|
|
23
23
|
def flatpickr_tag(**, &)
|
24
|
-
create_component(Plutonium::UI::Form::Components::
|
24
|
+
create_component(Plutonium::UI::Form::Components::Flatpickr, :flatpickr, **, &)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
data/lib/plutonium/version.rb
CHANGED
data/package-lock.json
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
{
|
2
2
|
"name": "@radioactive-labs/plutonium",
|
3
|
-
"version": "0.1.
|
3
|
+
"version": "0.1.15",
|
4
4
|
"lockfileVersion": 3,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "@radioactive-labs/plutonium",
|
9
|
-
"version": "0.1.
|
9
|
+
"version": "0.1.15",
|
10
10
|
"license": "MIT",
|
11
11
|
"dependencies": {
|
12
12
|
"@hotwired/stimulus": "^3.2.2",
|
13
13
|
"@hotwired/turbo": "^8.0.4",
|
14
|
+
"dompurify": "^3.2.2",
|
14
15
|
"flowbite": "^2.3.0",
|
15
16
|
"lodash.debounce": "^4.0.8"
|
16
17
|
},
|
@@ -1868,7 +1869,7 @@
|
|
1868
1869
|
"version": "2.0.7",
|
1869
1870
|
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
|
1870
1871
|
"integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
|
1871
|
-
"
|
1872
|
+
"devOptional": true,
|
1872
1873
|
"license": "MIT"
|
1873
1874
|
},
|
1874
1875
|
"node_modules/@types/unist": {
|
@@ -3757,11 +3758,13 @@
|
|
3757
3758
|
}
|
3758
3759
|
},
|
3759
3760
|
"node_modules/dompurify": {
|
3760
|
-
"version": "3.
|
3761
|
-
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.
|
3762
|
-
"integrity": "sha512-
|
3763
|
-
"
|
3764
|
-
"
|
3761
|
+
"version": "3.2.2",
|
3762
|
+
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.2.tgz",
|
3763
|
+
"integrity": "sha512-YMM+erhdZ2nkZ4fTNRTSI94mb7VG7uVF5vj5Zde7tImgnhZE3R6YW/IACGIHb2ux+QkEXMhe591N+5jWOmL4Zw==",
|
3764
|
+
"license": "(MPL-2.0 OR Apache-2.0)",
|
3765
|
+
"optionalDependencies": {
|
3766
|
+
"@types/trusted-types": "^2.0.7"
|
3767
|
+
}
|
3765
3768
|
},
|
3766
3769
|
"node_modules/domutils": {
|
3767
3770
|
"version": "3.1.0",
|
@@ -4590,6 +4593,13 @@
|
|
4590
4593
|
"uuid": "^9.0.1"
|
4591
4594
|
}
|
4592
4595
|
},
|
4596
|
+
"node_modules/mermaid/node_modules/dompurify": {
|
4597
|
+
"version": "3.1.6",
|
4598
|
+
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz",
|
4599
|
+
"integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==",
|
4600
|
+
"dev": true,
|
4601
|
+
"license": "(MPL-2.0 OR Apache-2.0)"
|
4602
|
+
},
|
4593
4603
|
"node_modules/micromark-util-character": {
|
4594
4604
|
"version": "2.1.0",
|
4595
4605
|
"resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
|
data/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@radioactive-labs/plutonium",
|
3
|
-
"version": "0.1.
|
3
|
+
"version": "0.1.15",
|
4
4
|
"description": "Core assets for the Plutonium gem",
|
5
5
|
"type": "module",
|
6
6
|
"main": "src/js/core.js",
|
@@ -20,6 +20,7 @@
|
|
20
20
|
"dependencies": {
|
21
21
|
"@hotwired/stimulus": "^3.2.2",
|
22
22
|
"@hotwired/turbo": "^8.0.4",
|
23
|
+
"dompurify": "^3.2.2",
|
23
24
|
"flowbite": "^2.3.0",
|
24
25
|
"lodash.debounce": "^4.0.8"
|
25
26
|
},
|
data/src/css/easymde.css
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/**
|
2
2
|
* EasyMDE + CodeMirror Styles
|
3
|
-
* Based on easymde
|
4
|
-
* Adapted for
|
3
|
+
* Based on https://cdn.jsdelivr.net/npm/easymde@2.18.0/dist/easymde.min.css
|
4
|
+
* Adapted for Flowbite with dark mode support
|
5
5
|
*/
|
6
6
|
|
7
7
|
@layer components {
|
@@ -304,47 +304,68 @@
|
|
304
304
|
}
|
305
305
|
|
306
306
|
.cm-s-easymde .cm-quote {
|
307
|
-
@apply text-
|
307
|
+
@apply text-gray-900 dark:text-white;
|
308
308
|
}
|
309
309
|
|
310
310
|
.cm-s-easymde .cm-keyword {
|
311
|
-
@apply text-
|
311
|
+
@apply text-gray-900 dark:text-white;
|
312
312
|
}
|
313
313
|
|
314
314
|
.cm-s-easymde .cm-atom {
|
315
|
-
@apply text-
|
315
|
+
@apply text-gray-900 dark:text-white;
|
316
316
|
}
|
317
317
|
|
318
318
|
.cm-s-easymde .cm-number {
|
319
|
-
@apply text-
|
319
|
+
@apply text-gray-900 dark:text-white;
|
320
320
|
}
|
321
321
|
|
322
322
|
.cm-s-easymde .cm-def {
|
323
|
-
@apply text-
|
323
|
+
@apply text-gray-900 dark:text-white;
|
324
324
|
}
|
325
325
|
|
326
326
|
.cm-s-easymde .cm-variable {
|
327
|
-
@apply text-gray-
|
327
|
+
@apply text-gray-900 dark:text-white;
|
328
328
|
}
|
329
329
|
|
330
330
|
.cm-s-easymde .cm-variable-2 {
|
331
|
-
@apply text-
|
331
|
+
@apply text-gray-900 dark:text-white;
|
332
332
|
}
|
333
333
|
|
334
334
|
.cm-s-easymde .cm-variable-3 {
|
335
|
-
@apply text-
|
335
|
+
@apply text-gray-900 dark:text-white;
|
336
|
+
}
|
337
|
+
|
338
|
+
.cm-formatting.cm-formatting-list {
|
339
|
+
@apply text-gray-900 dark:text-white;
|
340
|
+
}
|
341
|
+
|
342
|
+
.cm-formatting.cm-formatting-link {
|
343
|
+
@apply text-secondary-900 dark:text-secondary-400 !important;
|
344
|
+
}
|
345
|
+
|
346
|
+
.cm-formatting.cm-formatting-link-string {
|
347
|
+
@apply text-secondary-900 dark:text-secondary-400 !important;
|
348
|
+
}
|
349
|
+
|
350
|
+
|
351
|
+
.cm-s-easymde .cm-string {
|
352
|
+
@apply text-accent-600 dark:text-accent-400;
|
336
353
|
}
|
337
354
|
|
338
|
-
.cm-s-easymde .cm-
|
339
|
-
@apply text-
|
355
|
+
.cm-s-easymde .cm-string.cm-url {
|
356
|
+
@apply text-accent-600 dark:text-accent-400;
|
340
357
|
}
|
341
358
|
|
359
|
+
/* .cm-s-easymde .cm-link {
|
360
|
+
@apply text-accent-600 dark:text-accent-400;
|
361
|
+
} */
|
362
|
+
|
342
363
|
.cm-s-easymde .cm-url {
|
343
|
-
@apply text-
|
364
|
+
@apply text-gray-900 dark:text-white;
|
344
365
|
}
|
345
366
|
|
346
367
|
.cm-s-easymde .cm-string-2 {
|
347
|
-
@apply text-
|
368
|
+
@apply text-gray-900 dark:text-white;
|
348
369
|
}
|
349
370
|
|
350
371
|
.cm-s-easymde .cm-comment {
|
@@ -360,7 +381,7 @@
|
|
360
381
|
}
|
361
382
|
|
362
383
|
.cm-s-easymde .cm-attribute {
|
363
|
-
|
384
|
+
@apply text-secondary-600 dark:text-secondary-400;
|
364
385
|
}
|
365
386
|
|
366
387
|
.cm-s-easymde .cm-error {
|
@@ -467,19 +488,6 @@
|
|
467
488
|
direction: rtl;
|
468
489
|
}
|
469
490
|
|
470
|
-
/* Selection Styles */
|
471
|
-
/* .CodeMirror-line::selection,
|
472
|
-
.CodeMirror-line>span::selection,
|
473
|
-
.CodeMirror-line>span>span::selection {
|
474
|
-
@apply bg-accent-100 dark:bg-accent-900/30;
|
475
|
-
}
|
476
|
-
|
477
|
-
.CodeMirror-line::-moz-selection,
|
478
|
-
.CodeMirror-line>span::-moz-selection,
|
479
|
-
.CodeMirror-line>span>span::-moz-selection {
|
480
|
-
@apply bg-accent-100 dark:bg-accent-900/30;
|
481
|
-
} */
|
482
|
-
|
483
491
|
.CodeMirror-selectedtext {
|
484
492
|
@apply bg-gray-200/70 dark:bg-gray-600/50;
|
485
493
|
}
|
@@ -553,6 +561,10 @@
|
|
553
561
|
@apply outline-none;
|
554
562
|
}
|
555
563
|
|
564
|
+
.cm-tab {
|
565
|
+
@apply inline-block no-underline;
|
566
|
+
}
|
567
|
+
|
556
568
|
/* Fix for tab character rendering */
|
557
569
|
.cm-tab-wrap-hack:after {
|
558
570
|
content: '';
|
@@ -646,4 +658,69 @@
|
|
646
658
|
-webkit-font-smoothing: antialiased;
|
647
659
|
-moz-osx-font-smoothing: grayscale;
|
648
660
|
}
|
661
|
+
|
662
|
+
/* Typography Styles */
|
663
|
+
.cm-s-easymde .cm-header {
|
664
|
+
@apply text-gray-900 dark:text-white;
|
665
|
+
}
|
666
|
+
|
667
|
+
/* Focus/Selection Styles */
|
668
|
+
.CodeMirror-line::selection,
|
669
|
+
.CodeMirror-line>span::selection,
|
670
|
+
.CodeMirror-line>span>span::selection {
|
671
|
+
@apply bg-primary-100 dark:bg-primary-900/30;
|
672
|
+
}
|
673
|
+
|
674
|
+
.CodeMirror-line::-moz-selection,
|
675
|
+
.CodeMirror-line>span::-moz-selection,
|
676
|
+
.CodeMirror-line>span>span::-moz-selection {
|
677
|
+
@apply bg-primary-100 dark:bg-primary-900/30;
|
678
|
+
}
|
679
|
+
|
680
|
+
/* Tag Match Styles */
|
681
|
+
.CodeMirror-matchingtag {
|
682
|
+
@apply bg-yellow-200/30 dark:bg-yellow-900/30;
|
683
|
+
}
|
684
|
+
|
685
|
+
/* Search Highlight Styles */
|
686
|
+
.cm-searching {
|
687
|
+
@apply bg-yellow-200/40 dark:bg-yellow-900/40;
|
688
|
+
}
|
689
|
+
|
690
|
+
/* Ruler Styles */
|
691
|
+
.CodeMirror-rulers {
|
692
|
+
@apply absolute inset-x-0 -top-[50px] bottom-0 overflow-hidden;
|
693
|
+
}
|
694
|
+
|
695
|
+
.CodeMirror-ruler {
|
696
|
+
@apply border-l border-gray-300 dark:border-gray-600 top-0 bottom-0 absolute;
|
697
|
+
}
|
698
|
+
|
699
|
+
/* Editor Preview Full */
|
700
|
+
.editor-preview-full {
|
701
|
+
@apply absolute w-full h-full top-0 left-0 z-[7] overflow-auto hidden box-border;
|
702
|
+
}
|
703
|
+
|
704
|
+
/* Add active state for full preview */
|
705
|
+
.editor-preview-active {
|
706
|
+
@apply block;
|
707
|
+
}
|
708
|
+
|
709
|
+
/* Preview content specific styles */
|
710
|
+
.editor-preview-full {
|
711
|
+
@apply p-2.5 bg-gray-50 dark:bg-gray-900 format dark:format-invert format-primary max-w-none;
|
712
|
+
}
|
713
|
+
|
714
|
+
.editor-preview-full>p {
|
715
|
+
@apply mt-0;
|
716
|
+
}
|
717
|
+
|
718
|
+
.editor-preview-full pre {
|
719
|
+
@apply bg-gray-100 dark:bg-gray-800 mb-2.5;
|
720
|
+
}
|
721
|
+
|
722
|
+
.editor-preview-full table td,
|
723
|
+
.editor-preview-full table th {
|
724
|
+
@apply border border-gray-300 dark:border-gray-600 p-1.5;
|
725
|
+
}
|
649
726
|
}
|
data/src/css/slim_select.css
CHANGED
@@ -1,14 +1,52 @@
|
|
1
1
|
import { Controller } from "@hotwired/stimulus"
|
2
|
+
import DOMPurify from 'dompurify';
|
3
|
+
import { marked } from 'marked';
|
2
4
|
|
3
5
|
// Connects to data-controller="easymde"
|
4
6
|
export default class extends Controller {
|
5
7
|
connect() {
|
6
8
|
console.log(`easymde connected: ${this.element}`)
|
7
|
-
self.easyMDE = new EasyMDE(
|
9
|
+
self.easyMDE = new EasyMDE(this.#buildOptions())
|
10
|
+
this.element.setAttribute("data-action", "turbo:morph-element->easymde#reconnect")
|
8
11
|
}
|
9
12
|
|
10
13
|
disconnect() {
|
11
14
|
self.easyMDE.toTextArea()
|
12
15
|
self.easyMDE = null
|
13
16
|
}
|
17
|
+
|
18
|
+
reconnect() {
|
19
|
+
this.disconnect()
|
20
|
+
this.connect()
|
21
|
+
}
|
22
|
+
|
23
|
+
#buildOptions() {
|
24
|
+
let options = {
|
25
|
+
element: this.element,
|
26
|
+
promptURLs: true,
|
27
|
+
spellChecker: false,
|
28
|
+
// Override the default preview renderer
|
29
|
+
previewRender: (plainText) => {
|
30
|
+
// First sanitize the input to remove any undesired HTML
|
31
|
+
const cleanedText = DOMPurify.sanitize(plainText, {
|
32
|
+
ALLOWED_TAGS: ['strong', 'em', 'sub', 'sup', 'details', 'summary'],
|
33
|
+
ALLOWED_ATTR: []
|
34
|
+
});
|
35
|
+
|
36
|
+
// Then convert markdown to HTML
|
37
|
+
const cleanedHTML = marked(cleanedText);
|
38
|
+
|
39
|
+
// Finally, another pass, since marked does not sanitize html
|
40
|
+
return DOMPurify.sanitize(cleanedHTML, { USE_PROFILES: { html: true } })
|
41
|
+
}
|
42
|
+
}
|
43
|
+
if (this.element.attributes.id.value) {
|
44
|
+
options.autosave = {
|
45
|
+
enabled: true,
|
46
|
+
uniqueId: this.element.attributes.id.value,
|
47
|
+
delay: 1000,
|
48
|
+
}
|
49
|
+
}
|
50
|
+
return options
|
51
|
+
}
|
14
52
|
}
|
@@ -5,6 +5,7 @@ export default class extends Controller {
|
|
5
5
|
connect() {
|
6
6
|
console.log(`flatpickr connected: ${this.element}`)
|
7
7
|
self.picker = new flatpickr(this.element, this.#buildOptions())
|
8
|
+
this.element.setAttribute("data-action", "turbo:morph-element->flatpickr#reconnect")
|
8
9
|
}
|
9
10
|
|
10
11
|
disconnect() {
|
@@ -12,6 +13,11 @@ export default class extends Controller {
|
|
12
13
|
self.picker = null
|
13
14
|
}
|
14
15
|
|
16
|
+
reconnect() {
|
17
|
+
this.disconnect()
|
18
|
+
this.connect()
|
19
|
+
}
|
20
|
+
|
15
21
|
#buildOptions() {
|
16
22
|
let options = { altInput: true }
|
17
23
|
if (this.element.attributes.type.value == "datetime-local") {
|
@@ -7,10 +7,16 @@ export default class extends Controller {
|
|
7
7
|
self.slimSelect = new SlimSelect({
|
8
8
|
select: this.element
|
9
9
|
})
|
10
|
+
this.element.setAttribute("data-action", "turbo:morph-element->slim-select#reconnect")
|
10
11
|
}
|
11
12
|
|
12
13
|
disconnect() {
|
13
14
|
self.slimSelect.destroy()
|
14
15
|
self.slimSelect = null
|
15
16
|
}
|
17
|
+
|
18
|
+
reconnect() {
|
19
|
+
this.disconnect()
|
20
|
+
this.connect()
|
21
|
+
}
|
16
22
|
}
|
data/tailwind.options.js
CHANGED
@@ -29,42 +29,44 @@ export const theme = {
|
|
29
29
|
typography: ({ theme }) => ({
|
30
30
|
primary: {
|
31
31
|
css: {
|
32
|
-
'--tw-prose-body': theme('colors.
|
33
|
-
'--tw-prose-headings': theme('colors.
|
34
|
-
'--tw-prose-lead': theme('colors.
|
35
|
-
'--tw-prose-links': theme('colors.primary.
|
36
|
-
'--tw-prose-bold': theme('colors.
|
37
|
-
'--tw-prose-counters': theme('colors.
|
38
|
-
'--tw-prose-bullets': theme('colors.
|
39
|
-
'--tw-prose-hr': theme('colors.
|
40
|
-
'--tw-prose-quotes': theme('colors.
|
41
|
-
'--tw-prose-quote-borders': theme('colors.
|
42
|
-
'--tw-prose-captions': theme('colors.
|
43
|
-
'--tw-prose-code': theme('colors.
|
32
|
+
'--tw-prose-body': theme('colors.gray.900'),
|
33
|
+
'--tw-prose-headings': theme('colors.gray.900'),
|
34
|
+
'--tw-prose-lead': theme('colors.gray.600'),
|
35
|
+
'--tw-prose-links': theme('colors.primary.700'),
|
36
|
+
'--tw-prose-bold': theme('colors.gray.900'),
|
37
|
+
'--tw-prose-counters': theme('colors.gray.600'),
|
38
|
+
'--tw-prose-bullets': theme('colors.gray.600'),
|
39
|
+
'--tw-prose-hr': theme('colors.gray.200'),
|
40
|
+
'--tw-prose-quotes': theme('colors.gray.900'),
|
41
|
+
'--tw-prose-quote-borders': theme('colors.gray.300'),
|
42
|
+
'--tw-prose-captions': theme('colors.gray.700'),
|
43
|
+
'--tw-prose-code': theme('colors.gray.900'),
|
44
44
|
'--tw-prose-code-bg': theme('colors.primary.50'),
|
45
45
|
'--tw-prose-pre-code': theme('colors.primary.100'),
|
46
|
-
'--tw-prose-pre-bg': theme('colors.
|
47
|
-
'--tw-prose-th-borders': theme('colors.
|
48
|
-
'--tw-prose-td-borders': theme('colors.
|
49
|
-
'--tw-prose-th-bg': theme('colors.
|
46
|
+
'--tw-prose-pre-bg': theme('colors.gray.900'),
|
47
|
+
'--tw-prose-th-borders': theme('colors.gray.300'),
|
48
|
+
'--tw-prose-td-borders': theme('colors.gray.200'),
|
49
|
+
'--tw-prose-th-bg': theme('colors.gray.100'),
|
50
|
+
|
50
51
|
// Dark mode
|
51
|
-
'--tw-prose-invert-body': theme('colors.
|
52
|
-
'--tw-prose-invert-headings': theme('colors.
|
53
|
-
'--tw-prose-invert-lead': theme('colors.
|
54
|
-
'--tw-prose-invert-links': theme('colors.primary.
|
55
|
-
'--tw-prose-invert-bold': theme('colors.
|
56
|
-
'--tw-prose-invert-counters': theme('colors.
|
57
|
-
'--tw-prose-invert-bullets': theme('colors.
|
58
|
-
'--tw-prose-invert-hr': theme('colors.primary.
|
59
|
-
'--tw-prose-invert-quotes': theme('colors.
|
60
|
-
'--tw-prose-invert-quote-borders': theme('colors.
|
61
|
-
'--tw-prose-invert-captions': theme('colors.
|
62
|
-
'--tw-prose-invert-code': theme('colors.
|
63
|
-
'--tw-prose-invert-
|
64
|
-
'--tw-prose-invert-pre-
|
65
|
-
'--tw-prose-invert-
|
66
|
-
'--tw-prose-invert-
|
67
|
-
'--tw-prose-invert-
|
52
|
+
'--tw-prose-invert-body': theme('colors.white'),
|
53
|
+
'--tw-prose-invert-headings': theme('colors.secondary.100'),
|
54
|
+
'--tw-prose-invert-lead': theme('colors.secondary.400'),
|
55
|
+
'--tw-prose-invert-links': theme('colors.primary.500'),
|
56
|
+
'--tw-prose-invert-bold': theme('colors.secondary.100'),
|
57
|
+
'--tw-prose-invert-counters': theme('colors.gray.400'),
|
58
|
+
'--tw-prose-invert-bullets': theme('colors.gray.400'),
|
59
|
+
'--tw-prose-invert-hr': theme('colors.primary.800'),
|
60
|
+
'--tw-prose-invert-quotes': theme('colors.secondary.100'),
|
61
|
+
'--tw-prose-invert-quote-borders': theme('colors.gray.500'),
|
62
|
+
'--tw-prose-invert-captions': theme('colors.secondary.300'),
|
63
|
+
'--tw-prose-invert-code': theme('colors.secondary.100'),
|
64
|
+
'--tw-prose-invert-code-bg': theme('colors.primary.950'),
|
65
|
+
'--tw-prose-invert-pre-code': theme('colors.primary.900'),
|
66
|
+
'--tw-prose-invert-pre-bg': theme('colors.secondary.100'),
|
67
|
+
'--tw-prose-invert-th-borders': theme('colors.gray.600'),
|
68
|
+
'--tw-prose-invert-td-borders': theme('colors.gray.700'),
|
69
|
+
'--tw-prose-invert-th-bg': theme('colors.gray.800'),
|
68
70
|
},
|
69
71
|
},
|
70
72
|
}),
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plutonium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.15.
|
4
|
+
version: 0.15.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Froelich
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zeitwerk
|
@@ -1400,16 +1400,16 @@ files:
|
|
1400
1400
|
- lib/plutonium/ui/component/kit.rb
|
1401
1401
|
- lib/plutonium/ui/component/methods.rb
|
1402
1402
|
- lib/plutonium/ui/display/base.rb
|
1403
|
-
- lib/plutonium/ui/display/component/
|
1404
|
-
- lib/plutonium/ui/display/component/
|
1403
|
+
- lib/plutonium/ui/display/component/association.rb
|
1404
|
+
- lib/plutonium/ui/display/component/markdown.rb
|
1405
1405
|
- lib/plutonium/ui/display/resource.rb
|
1406
1406
|
- lib/plutonium/ui/display/theme.rb
|
1407
1407
|
- lib/plutonium/ui/dyna_frame/content.rb
|
1408
1408
|
- lib/plutonium/ui/dyna_frame/host.rb
|
1409
1409
|
- lib/plutonium/ui/empty_card.rb
|
1410
1410
|
- lib/plutonium/ui/form/base.rb
|
1411
|
-
- lib/plutonium/ui/form/components/
|
1412
|
-
- lib/plutonium/ui/form/components/
|
1411
|
+
- lib/plutonium/ui/form/components/easymde.rb
|
1412
|
+
- lib/plutonium/ui/form/components/flatpickr.rb
|
1413
1413
|
- lib/plutonium/ui/form/concerns/renders_nested_resource_fields.rb
|
1414
1414
|
- lib/plutonium/ui/form/interaction.rb
|
1415
1415
|
- lib/plutonium/ui/form/options/inferred_types.rb
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "redcarpet"
|
4
|
-
|
5
|
-
module Plutonium
|
6
|
-
module UI
|
7
|
-
module Display
|
8
|
-
module Component
|
9
|
-
class MarkdownField < Phlexi::Display::Components::Base
|
10
|
-
include Phlexi::Display::Components::Concerns::DisplaysValue
|
11
|
-
|
12
|
-
RENDERER = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, tables: true)
|
13
|
-
|
14
|
-
def render_value(value)
|
15
|
-
article(**attributes) do
|
16
|
-
unsafe_raw RENDERER.render(value)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
|
22
|
-
def normalize_value(value)
|
23
|
-
if value.respond_to?(:to_plain_text)
|
24
|
-
value.to_plain_text
|
25
|
-
else
|
26
|
-
value.to_s
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|