fragment-tools 0.1.13 → 0.1.15

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.
Files changed (184) hide show
  1. package/.prettierignore +1 -2
  2. package/.prettierrc +23 -7
  3. package/README.md +28 -9
  4. package/bin/index.js +70 -10
  5. package/package.json +14 -6
  6. package/src/cli/build.js +125 -0
  7. package/src/cli/create.js +238 -0
  8. package/src/cli/createConfig.js +82 -0
  9. package/src/cli/createFragmentFile.js +70 -0
  10. package/src/cli/getEntries.js +85 -0
  11. package/src/cli/log.js +36 -24
  12. package/src/cli/plugins/check-dependencies.js +88 -42
  13. package/src/cli/plugins/hot-shader-replacement.js +408 -0
  14. package/src/cli/plugins/hot-sketch-reload.js +21 -25
  15. package/src/cli/plugins/save.js +101 -0
  16. package/src/cli/preview.js +55 -0
  17. package/src/cli/prompts.js +260 -0
  18. package/src/cli/run.js +131 -0
  19. package/src/cli/templates/blank/index.js +33 -0
  20. package/src/cli/templates/blank/meta.json +4 -0
  21. package/src/cli/templates/default/index.js +39 -0
  22. package/src/cli/templates/default/meta.json +5 -0
  23. package/src/cli/templates/fragment-gl/index.js +37 -0
  24. package/src/cli/templates/fragment-gl/meta.json +4 -0
  25. package/src/cli/templates/p5/index.js +32 -0
  26. package/src/cli/templates/p5/meta.json +5 -0
  27. package/src/cli/templates/p5-webgl/fragment.fs +14 -0
  28. package/src/cli/templates/p5-webgl/index.js +67 -0
  29. package/src/cli/templates/p5-webgl/meta.json +5 -0
  30. package/src/cli/templates/three-fragment/fragment.fs +10 -0
  31. package/src/cli/templates/three-fragment/index.js +95 -0
  32. package/src/cli/templates/three-fragment/meta.json +5 -0
  33. package/src/cli/templates/three-orthographic/index.js +55 -0
  34. package/src/cli/templates/three-orthographic/meta.json +5 -0
  35. package/src/cli/templates/three-perspective/index.js +52 -0
  36. package/src/cli/templates/three-perspective/meta.json +5 -0
  37. package/src/cli/utils.js +70 -0
  38. package/src/cli/ws.js +87 -78
  39. package/src/client/app/App.svelte +3 -3
  40. package/src/client/app/client.js +55 -39
  41. package/src/client/app/components/IconCross.svelte +18 -18
  42. package/src/client/app/components/Init.svelte +40 -8
  43. package/src/client/app/components/KeyBinding.svelte +22 -22
  44. package/src/client/app/helpers.js +42 -0
  45. package/src/client/app/hooks.js +20 -0
  46. package/src/client/app/inputs/Input.js +9 -9
  47. package/src/client/app/inputs/Keyboard.js +13 -15
  48. package/src/client/app/inputs/MIDI.js +14 -15
  49. package/src/client/app/inputs/Mouse.js +1 -1
  50. package/src/client/app/inputs/Webcam.js +89 -88
  51. package/src/client/app/lib/canvas-recorder/CanvasRecorder.js +41 -21
  52. package/src/client/app/lib/canvas-recorder/FrameRecorder.js +7 -6
  53. package/src/client/app/lib/canvas-recorder/H264Recorder.js +45 -0
  54. package/src/client/app/lib/canvas-recorder/MP4Recorder.js +7 -9
  55. package/src/client/app/lib/canvas-recorder/WebMRecorder.js +3 -4
  56. package/src/client/app/lib/canvas-recorder/mp4.js +1649 -15
  57. package/src/client/app/lib/canvas-recorder/utils.js +33 -17
  58. package/src/client/app/lib/gl/Geometry.js +11 -8
  59. package/src/client/app/lib/gl/Program.js +38 -19
  60. package/src/client/app/lib/gl/Renderer.js +163 -156
  61. package/src/client/app/lib/gl/Texture.js +113 -85
  62. package/src/client/app/lib/gl/index.js +12 -12
  63. package/src/client/app/lib/gl/utils.js +1 -3
  64. package/src/client/app/lib/helpers/frameDebounce.js +30 -30
  65. package/src/client/app/lib/loader/index.js +10 -10
  66. package/src/client/app/lib/loader/loadImage.js +15 -15
  67. package/src/client/app/lib/loader/loadScript.js +1 -1
  68. package/src/client/app/lib/paper-sizes.js +75 -76
  69. package/src/client/app/lib/presets.js +25 -5
  70. package/src/client/app/lib/tempo/Analyser.js +18 -17
  71. package/src/client/app/lib/tempo/Range.js +15 -12
  72. package/src/client/app/lib/tempo/index.js +34 -27
  73. package/src/client/app/modules/AudioAnalyser/Range.svelte +69 -72
  74. package/src/client/app/modules/AudioAnalyser/Spectrum.svelte +20 -19
  75. package/src/client/app/modules/AudioAnalyser.svelte +52 -35
  76. package/src/client/app/modules/Console/ConsoleLine.svelte +193 -172
  77. package/src/client/app/modules/Console.svelte +76 -74
  78. package/src/client/app/modules/Exports.svelte +62 -43
  79. package/src/client/app/modules/MidiPanel.svelte +100 -101
  80. package/src/client/app/modules/Monitor.svelte +57 -57
  81. package/src/client/app/modules/Params.svelte +128 -103
  82. package/src/client/app/renderers/2DRenderer.js +3 -3
  83. package/src/client/app/renderers/FragmentRenderer.js +30 -23
  84. package/src/client/app/renderers/P5GLRenderer.js +144 -0
  85. package/src/client/app/renderers/P5Renderer.js +10 -7
  86. package/src/client/app/renderers/THREERenderer.js +136 -94
  87. package/src/client/app/stores/audioAnalysis.js +3 -4
  88. package/src/client/app/stores/console.js +9 -10
  89. package/src/client/app/stores/errors.js +1 -1
  90. package/src/client/app/stores/exports.js +36 -20
  91. package/src/client/app/stores/index.js +2 -2
  92. package/src/client/app/stores/layout.js +143 -138
  93. package/src/client/app/stores/multisampling.js +4 -4
  94. package/src/client/app/stores/props.js +76 -13
  95. package/src/client/app/stores/renderers.js +26 -15
  96. package/src/client/app/stores/rendering.js +108 -89
  97. package/src/client/app/stores/sketches.js +7 -9
  98. package/src/client/app/stores/time.js +18 -18
  99. package/src/client/app/stores/utils.js +95 -38
  100. package/src/client/app/transitions/fade.js +3 -3
  101. package/src/client/app/transitions/index.js +6 -7
  102. package/src/client/app/transitions/splitX.js +2 -2
  103. package/src/client/app/transitions/splitY.js +2 -2
  104. package/src/client/app/triggers/Keyboard.js +88 -79
  105. package/src/client/app/triggers/MIDI.js +110 -84
  106. package/src/client/app/triggers/Mouse.js +73 -65
  107. package/src/client/app/triggers/Trigger.js +59 -58
  108. package/src/client/app/triggers/index.js +7 -7
  109. package/src/client/app/triggers/shared.js +5 -5
  110. package/src/client/app/ui/Build.svelte +70 -71
  111. package/src/client/app/ui/ErrorOverlay.svelte +118 -104
  112. package/src/client/app/ui/Field.svelte +393 -258
  113. package/src/client/app/ui/FieldGroup.svelte +106 -94
  114. package/src/client/app/ui/FieldSection.svelte +127 -116
  115. package/src/client/app/ui/FieldSpace.svelte +29 -30
  116. package/src/client/app/ui/FieldTrigger.svelte +256 -244
  117. package/src/client/app/ui/FieldTriggers.svelte +46 -46
  118. package/src/client/app/ui/FloatingParams.svelte +29 -30
  119. package/src/client/app/ui/Layout.svelte +31 -32
  120. package/src/client/app/ui/LayoutColumn.svelte +4 -4
  121. package/src/client/app/ui/LayoutComponent.svelte +239 -225
  122. package/src/client/app/ui/LayoutResizer.svelte +195 -176
  123. package/src/client/app/ui/LayoutRoot.svelte +6 -6
  124. package/src/client/app/ui/LayoutRow.svelte +4 -4
  125. package/src/client/app/ui/LayoutToolbar.svelte +191 -194
  126. package/src/client/app/ui/Module.svelte +134 -135
  127. package/src/client/app/ui/ModuleHeaderAction.svelte +81 -78
  128. package/src/client/app/ui/ModuleHeaderButton.svelte +12 -12
  129. package/src/client/app/ui/ModuleHeaderSelect.svelte +47 -37
  130. package/src/client/app/ui/ModuleRenderer.svelte +26 -27
  131. package/src/client/app/ui/OutputRenderer.svelte +112 -105
  132. package/src/client/app/ui/ParamsMultisampling.svelte +96 -95
  133. package/src/client/app/ui/ParamsOutput.svelte +130 -113
  134. package/src/client/app/ui/Preview.svelte +7 -8
  135. package/src/client/app/ui/SelectChevrons.svelte +27 -15
  136. package/src/client/app/ui/SketchRenderer.svelte +780 -667
  137. package/src/client/app/ui/SketchSelect.svelte +50 -44
  138. package/src/client/app/ui/fields/ButtonInput.svelte +61 -48
  139. package/src/client/app/ui/fields/CheckboxInput.svelte +67 -61
  140. package/src/client/app/ui/fields/ColorInput.svelte +294 -238
  141. package/src/client/app/ui/fields/FieldInputRow.svelte +8 -8
  142. package/src/client/app/ui/fields/ImageInput.svelte +123 -121
  143. package/src/client/app/ui/fields/Input.svelte +100 -111
  144. package/src/client/app/ui/fields/IntervalInput.svelte +268 -0
  145. package/src/client/app/ui/fields/ListInput.svelte +96 -96
  146. package/src/client/app/ui/fields/NumberInput.svelte +120 -116
  147. package/src/client/app/ui/fields/ProgressInput.svelte +99 -73
  148. package/src/client/app/ui/fields/Select.svelte +137 -124
  149. package/src/client/app/ui/fields/TextInput.svelte +10 -11
  150. package/src/client/app/ui/fields/VectorInput.svelte +86 -82
  151. package/src/client/app/utils/canvas.utils.js +189 -208
  152. package/src/client/app/utils/color.utils.js +138 -101
  153. package/src/client/app/utils/fields.utils.js +131 -0
  154. package/src/client/app/utils/file.utils.js +209 -37
  155. package/src/client/app/utils/glsl.utils.js +2 -2
  156. package/src/client/app/utils/glslErrors.js +49 -31
  157. package/src/client/app/utils/index.js +32 -29
  158. package/src/client/app/utils/math.utils.js +14 -10
  159. package/src/client/index.html +16 -16
  160. package/src/client/main.js +4 -4
  161. package/src/client/public/css/global.css +26 -16
  162. package/src/cli/db.js +0 -17
  163. package/src/cli/index.js +0 -198
  164. package/src/cli/plugins/db.js +0 -12
  165. package/src/cli/plugins/hot-shader-reload.js +0 -86
  166. package/src/cli/plugins/screenshot.js +0 -46
  167. package/src/cli/server.js +0 -153
  168. package/src/cli/templates/2d.js +0 -15
  169. package/src/cli/templates/blank.js +0 -13
  170. package/src/cli/templates/fragment.js +0 -18
  171. package/src/cli/templates/index.js +0 -27
  172. package/src/cli/templates/p5.js +0 -13
  173. package/src/cli/templates/three-fragment.js +0 -53
  174. package/src/cli/templates/three-orthographic.js +0 -23
  175. package/src/cli/templates/three-perspective.js +0 -20
  176. package/src/client/app/lib/canvas-recorder/FFMPEGRecorder.js +0 -56
  177. package/src/client/app/utils/props.utils.js +0 -51
  178. package/src/client/public/fonts/Inter-Bold.woff2 +0 -0
  179. package/src/client/public/fonts/Inter-Italic.woff2 +0 -0
  180. package/src/client/public/fonts/Inter-Regular.woff2 +0 -0
  181. package/src/client/public/fonts/Inter-SemiBold.woff2 +0 -0
  182. package/src/client/public/js/ffmpeg.min.js +0 -2
  183. package/src/client/public/js/ffmpeg.min.js.map +0 -1
  184. /package/src/cli/templates/{fragment.fs → fragment-gl/fragment.fs} +0 -0
@@ -1,103 +1,115 @@
1
1
  <script>
2
- export let name;
2
+ export let name;
3
3
 
4
- export let collapsed = false;
5
-
6
- function handleClick() {
7
- collapsed = !collapsed;
8
- }
4
+ export let collapsed = false;
9
5
 
6
+ function handleClick() {
7
+ collapsed = !collapsed;
8
+ }
10
9
  </script>
11
10
 
12
- <div class="field-group {collapsed ? "collapsed" : ""}">
13
- <header class="header">
14
- <button class="header__action" on:click={handleClick}>
15
- <svg class="header__icon" width="24" height="24" fill="none" viewBox="0 0 24 24">
16
- <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M10.75 8.75L14.25 12L10.75 15.25"/>
17
- </svg>
18
- <span class="field-group__name">{name}</span>
19
- </button>
20
- </header>
21
- <div class="content">
22
- <slot></slot>
23
- </div>
11
+ <div class="field-group {collapsed ? 'collapsed' : ''}">
12
+ <header class="header">
13
+ <button class="header__action" on:click={handleClick}>
14
+ <svg
15
+ class="header__icon"
16
+ width="24"
17
+ height="24"
18
+ fill="none"
19
+ viewBox="0 0 24 24"
20
+ >
21
+ <path
22
+ stroke="currentColor"
23
+ stroke-linecap="round"
24
+ stroke-linejoin="round"
25
+ stroke-width="1.5"
26
+ d="M10.75 8.75L14.25 12L10.75 15.25"
27
+ />
28
+ </svg>
29
+ <span class="field-group__name">{name}</span>
30
+ </button>
31
+ </header>
32
+ <div class="content">
33
+ <slot />
34
+ </div>
24
35
  </div>
25
36
 
26
37
  <style>
27
- .field-group {
28
- position: relative;
29
-
30
- display: grid;
31
- width: 100%;
32
-
33
- }
34
-
35
- .field-group:after {
36
- content: "";
37
-
38
- position: absolute;
39
- left: 0;
40
- bottom: 0px;
41
-
42
- width: 12px;
43
- height: 1px;
44
-
45
- background-color: #323233;
46
- }
47
-
48
- .header {
49
- padding: 3px 6px;
50
- border-bottom: 1px solid #323233;
51
- }
52
-
53
- .header__action {
54
- display: flex;
55
- align-items: center;
56
- width: 100%;
57
- text-align: left;
58
-
59
- background: transparent;
60
- cursor: pointer;
61
- }
62
-
63
- .header__icon {
64
- padding-bottom: 1px;
65
-
66
- color: #f0f0f0;
67
- transform: rotate(90deg);
68
- opacity: 0.5;
69
- transition: opacity 0.1s ease;
70
- }
71
-
72
- .header__action:hover .header__icon {
73
- opacity: 1;
74
- }
75
-
76
- .field-group.collapsed .header__icon {
77
- transform: rotate(0deg);
78
- }
79
-
80
- .field-group__name {
81
- color: #f0f0f0;
82
-
83
- font-size: 11px;
84
- font-weight: 700;
85
- /* text-transform: uppercase; */
86
-
87
- opacity: 0.75;
88
- transition: opacity 0.1s ease;
89
- }
90
-
91
- .header__action:hover .field-group__name {
92
- opacity: 1;
93
- }
94
-
95
- .content {
96
- margin-left: 12px;
97
- border-left: 1px solid #323233;
98
- }
99
-
100
- .field-group.collapsed .content {
101
- display: none;
102
- }
38
+ .field-group {
39
+ position: relative;
40
+
41
+ display: grid;
42
+ width: 100%;
43
+ }
44
+
45
+ .field-group:after {
46
+ content: '';
47
+
48
+ position: absolute;
49
+ left: 0;
50
+ bottom: 0px;
51
+
52
+ width: 12px;
53
+ height: 1px;
54
+
55
+ background-color: #323233;
56
+ }
57
+
58
+ .header {
59
+ padding: 3px 6px;
60
+ border-bottom: 1px solid #323233;
61
+ }
62
+
63
+ .header__action {
64
+ display: flex;
65
+ align-items: center;
66
+ width: 100%;
67
+ text-align: left;
68
+
69
+ background: transparent;
70
+ cursor: pointer;
71
+ outline: 0;
72
+ }
73
+
74
+ .header__icon {
75
+ padding-bottom: 1px;
76
+
77
+ color: #f0f0f0;
78
+ transform: rotate(90deg);
79
+ opacity: 0.5;
80
+ transition: opacity 0.1s ease;
81
+ }
82
+
83
+ .header__action:hover .header__icon {
84
+ opacity: 1;
85
+ }
86
+
87
+ .field-group.collapsed .header__icon {
88
+ transform: rotate(0deg);
89
+ }
90
+
91
+ .field-group__name {
92
+ color: #f0f0f0;
93
+
94
+ font-size: 11px;
95
+ font-weight: 700;
96
+ /* text-transform: uppercase; */
97
+
98
+ opacity: 0.75;
99
+ transition: opacity 0.1s ease;
100
+ }
101
+
102
+ .header__action:hover .field-group__name,
103
+ .header__action:focus-visible .field-group__name {
104
+ opacity: 1;
105
+ }
106
+
107
+ .content {
108
+ margin-left: 12px;
109
+ border-left: 1px solid #323233;
110
+ }
111
+
112
+ .field-group.collapsed .content {
113
+ display: none;
114
+ }
103
115
  </style>
@@ -1,123 +1,134 @@
1
1
  <script>
2
- export let visible = true;
3
- export let secondary = false;
4
- export let interactive = false;
5
- export let label = "";
6
- export let name = "";
2
+ export let key;
3
+ export let visible = true;
4
+ export let secondary = false;
5
+ export let interactive = false;
6
+ export let displayName = undefined;
7
+ export let disabled = false;
7
8
  </script>
8
9
 
9
- <div class="field__section" class:visible={visible} class:secondary={secondary} class:no-label={label === null}>
10
- <div class="field__infos">
11
- {#if label !== null}
12
- {#if interactive}
13
- <button class="field__label" on:click>{label}</button>
14
- {:else}
15
- <span class="field__label">{label}</span>
16
- {/if}
17
- {/if}
18
- <slot name="infos"></slot>
19
- </div>
20
- <div class="field__input">
21
- <slot></slot>
22
- </div>
10
+ <div
11
+ class="field__section"
12
+ class:visible
13
+ class:secondary
14
+ class:nameless={displayName === null}
15
+ >
16
+ <div class="field__infos">
17
+ {#if displayName !== null}
18
+ {#if interactive}
19
+ <button class="field__label" {disabled} on:click
20
+ >{displayName ?? key}</button
21
+ >
22
+ {:else}
23
+ <span class="field__label">{displayName ?? key}</span>
24
+ {/if}
25
+ {/if}
26
+ <slot name="infos" />
27
+ </div>
28
+ <div class="field__input">
29
+ <slot />
30
+ </div>
23
31
  </div>
24
32
 
25
33
  <style>
26
- .field__section {
27
- position: relative;
28
-
29
- display: grid;
30
- grid-template-columns: 0.5fr 1fr;
31
- column-gap: 10px;
32
- }
33
-
34
- .field__section.no-label {
35
- grid-template-columns: 1fr;
36
- }
37
-
38
- .field__section:hover .field__label, .field__section:focus-within .field__label {
39
- opacity: 1;
40
- }
41
-
42
- .field__section:not(.visible) {
43
- display: none;
44
- }
45
-
46
- .field__section.secondary {
47
- --margin: 15px;
48
-
49
- grid-template-columns: 0.25fr 1fr;
50
- margin-top: var(--margin);
51
- }
52
-
53
- .field__section.secondary:before {
54
- content: '';
55
-
56
- position: absolute;
57
- left: 10px;
58
- top: calc(var(--margin) * -1);
59
-
60
- width: 1px;
61
- height: var(--margin);
62
-
63
- background-color: var(--color-spacing);
64
- }
65
-
66
- .field__infos {
67
- position: relative;
68
-
69
- display: flex;
70
- align-items: center;
71
- justify-content: space-between;
72
-
73
- color: var(--color-text);
74
- }
75
-
76
- .field__label {
77
- color: inherit;
78
- font-size: var(--font-size-input);
79
- user-select: none;
80
-
81
- opacity: 0.6;
82
- background-color: transparent;
83
- transition: opacity 0.1s ease;
84
- }
85
-
86
- button.field__label {
87
- cursor: pointer;
88
- }
89
-
90
- .field__label:focus-visible {
91
- outline: 0;
92
- box-shadow: 0 0 0 2px var(--color-text);
93
- border-radius: 2px;
94
- }
95
-
96
- .field__section.secondary {
97
- grid-template-columns: 1fr;
98
- }
99
-
100
- .field__section.secondary .field__infos {
101
- display: none;
102
- }
103
-
104
- .field__section.secondary .field__label {
105
- position: relative;
106
-
107
- padding-left: 5px;
108
-
109
- background-color: #242425;
110
- }
111
-
112
- .field__input {
113
- display: flex;
114
- flex-direction: column;
115
- justify-content: center;
116
- align-items: flex-start;
117
- }
118
-
119
- .field__section.secondary .field__input {
120
- padding: var(--column-gap);
121
- border: 1px solid var(--color-spacing);
122
- }
34
+ .field__section {
35
+ position: relative;
36
+
37
+ display: grid;
38
+ grid-template-columns: 0.5fr 1fr;
39
+ column-gap: 10px;
40
+ }
41
+
42
+ .field__section.nameless {
43
+ grid-template-columns: 1fr;
44
+ }
45
+
46
+ .field__section:hover .field__label,
47
+ .field__section:focus-within .field__label {
48
+ opacity: 1;
49
+ }
50
+
51
+ .field__section:not(.visible) {
52
+ display: none;
53
+ }
54
+
55
+ .field__section.secondary {
56
+ --margin: 15px;
57
+
58
+ grid-template-columns: 0.25fr 1fr;
59
+ margin-top: var(--margin);
60
+ }
61
+
62
+ .field__section.secondary:before {
63
+ content: '';
64
+
65
+ position: absolute;
66
+ left: 10px;
67
+ top: calc(var(--margin) * -1);
68
+
69
+ width: 1px;
70
+ height: var(--margin);
71
+
72
+ background-color: var(--color-spacing);
73
+ }
74
+
75
+ .field__infos {
76
+ position: relative;
77
+
78
+ display: flex;
79
+ align-items: center;
80
+ justify-content: space-between;
81
+
82
+ color: var(--color-text);
83
+ }
84
+
85
+ .field__label {
86
+ color: inherit;
87
+ font-size: var(--font-size-input);
88
+ user-select: none;
89
+
90
+ opacity: 0.6;
91
+ background-color: transparent;
92
+ transition: opacity 0.1s ease;
93
+ }
94
+
95
+ button.field__label {
96
+ cursor: pointer;
97
+ }
98
+
99
+ .field__label:focus-visible {
100
+ outline: 0;
101
+ box-shadow: 0 0 0 2px var(--color-text);
102
+ border-radius: 2px;
103
+ }
104
+
105
+ .field__section.secondary {
106
+ grid-template-columns: 1fr;
107
+ }
108
+
109
+ .field__section.secondary .field__infos {
110
+ display: none;
111
+ }
112
+
113
+ .field__section.secondary .field__label {
114
+ position: relative;
115
+
116
+ padding-left: 5px;
117
+
118
+ background-color: #242425;
119
+ }
120
+
121
+ .field__input {
122
+ display: flex;
123
+ flex-direction: column;
124
+ justify-content: center;
125
+ align-items: flex-start;
126
+
127
+ min-height: calc(var(--height-input) + 4px);
128
+ }
129
+
130
+ .field__section.secondary .field__input {
131
+ padding: var(--column-gap);
132
+ border: 1px solid var(--color-spacing);
133
+ }
123
134
  </style>
@@ -1,37 +1,36 @@
1
1
  <script>
2
- export let height = 20;
2
+ export let height = 20;
3
3
  </script>
4
4
 
5
5
  <div class="field-space" style="height: {height}px"></div>
6
6
 
7
7
  <style>
8
- .field-space {
9
- position: relative;
10
-
11
- border-bottom: 1px solid var(--color-spacing);
12
- overflow: hidden;
13
- }
14
-
15
- .field-space:before, .field-space:after {
16
- /* content: ''; */
17
- position: absolute;
18
- top: 50%;
19
- left: 0;
20
-
21
- width: 100%;
22
- height: 1px;
23
-
24
- background-color: var(--color-spacing);
25
- }
26
-
27
- .field-space:before {
28
- transform: rotate(3deg);
29
- }
30
-
31
- .field-space:after {
32
- content: none;
33
- transform: rotate(-3deg);
34
- }
35
-
36
-
8
+ .field-space {
9
+ position: relative;
10
+
11
+ border-bottom: 1px solid var(--color-spacing);
12
+ overflow: hidden;
13
+ }
14
+
15
+ .field-space:before,
16
+ .field-space:after {
17
+ /* content: ''; */
18
+ position: absolute;
19
+ top: 50%;
20
+ left: 0;
21
+
22
+ width: 100%;
23
+ height: 1px;
24
+
25
+ background-color: var(--color-spacing);
26
+ }
27
+
28
+ .field-space:before {
29
+ transform: rotate(3deg);
30
+ }
31
+
32
+ .field-space:after {
33
+ content: none;
34
+ transform: rotate(-3deg);
35
+ }
37
36
  </style>