ariadne_view_components 0.0.79.2 → 0.0.79.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 858e616d4ab6d8334533068bc806476b1484e866d66234c1668dcc4f068ff3cd
4
- data.tar.gz: 3fbea72d7c46d67b59b6f3a02262032891d279cbb615c67cb79f55d12e2cafd3
3
+ metadata.gz: 191ebf85e699edb8806ba64a8979be20bfc962db6b2f36fcf37fb244ae7bd753
4
+ data.tar.gz: 802332bdae038a697836a0f09b8c06cdee7b98fc6bc1947ab35f8918aa3249ef
5
5
  SHA512:
6
- metadata.gz: 7f3d3f746728bc30b53334ce69044cb6fae3e3c8e4a6b0772338ad26803a6f95b6cb885f026d56f82d4ea1d7e683f0eb24e26e779ea538c2e52ccf6096c06af0
7
- data.tar.gz: 183a8739ae7805aedc33c3469c854aa3cfd794980df0eb2b6f620486a0cc636e58960fc32c176e42d4d8f77b720a02984b3e002da2f7a5bd783b5aa8455a67a9
6
+ metadata.gz: 7bd1b82ed39aef69f710450c25f0c7bc4e96ba9629100f7cbd980d8877ec8e158a87fa9058819efb83c07de57cd89760aa34fefe9c10c02bfb9c53cee453cd51
7
+ data.tar.gz: 2b6a746a0c4f6711d00fd5209b941eba4a4a002f3cd16ee443d1c699fb257d03995552d6408d5279f5d0979318eb5d230ea2498ef5ef6b42db57efdb4dfed7d6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,5 @@
1
+ ## [v0.0.79.2] - 25-04-2024
2
+ **Full Changelog**: https://github.com/yettoapp/ariadne/compare/v0.0.79.1...v0.0.79.2
1
3
  ## [v0.0.79.1] - 25-04-2024
2
4
  **Full Changelog**: https://github.com/yettoapp/ariadne/compare/v0.0.79...v0.0.79.1
3
5
  ## [v0.0.79] - 24-04-2024
@@ -0,0 +1,83 @@
1
+ import { Controller } from '@hotwired/stimulus';
2
+ import { html } from 'lit-html';
3
+ class AriadneFormWith extends Controller {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.onBlur = (event) => {
7
+ this.validateField(event.target);
8
+ };
9
+ this.onSubmit = (event) => {
10
+ if (!this.validateForm()) {
11
+ event.preventDefault();
12
+ this.firstInvalidField?.focus();
13
+ }
14
+ };
15
+ this.getRenderString = (data) => {
16
+ const { strings, values } = data;
17
+ const v = [...values, ''].map(e => (typeof e === 'object' ? this.getRenderString(e) : e));
18
+ return strings.reduce((acc, s, i) => acc + s + v[i], '');
19
+ };
20
+ }
21
+ connect() {
22
+ this.element.setAttribute('novalidate', 'true');
23
+ this.element.addEventListener('blur', this.onBlur, true);
24
+ this.element.addEventListener('submit', this.onSubmit);
25
+ this.element.addEventListener('ajax:beforeSend', this.onSubmit);
26
+ }
27
+ disconnect() {
28
+ this.element.removeEventListener('blur', this.onBlur);
29
+ this.element.removeEventListener('submit', this.onSubmit);
30
+ this.element.removeEventListener('ajax:beforeSend', this.onSubmit);
31
+ }
32
+ validateForm() {
33
+ let isValid = true;
34
+ // Not using `find` because we want to validate all the fields
35
+ for (const field of this.formFields) {
36
+ if (this.shouldValidateField(field) && !this.validateField(field))
37
+ isValid = false;
38
+ }
39
+ return isValid;
40
+ }
41
+ validateField(field) {
42
+ if (!this.shouldValidateField(field))
43
+ return true;
44
+ const isValid = field.checkValidity();
45
+ field.classList.toggle('invalid', !isValid);
46
+ this.refreshErrorForInvalidField(field, isValid);
47
+ return isValid;
48
+ }
49
+ shouldValidateField(field) {
50
+ return (!field.disabled &&
51
+ !field.classList.contains('ProseMirror') &&
52
+ !['file', 'reset', 'submit', 'button'].includes(field.type));
53
+ }
54
+ refreshErrorForInvalidField(field, isValid) {
55
+ this.removeExistingErrorMessage(field);
56
+ if (!isValid)
57
+ this.showErrorForInvalidField(field);
58
+ }
59
+ removeExistingErrorMessage(field) {
60
+ const fieldContainer = field.closest('.field');
61
+ if (!fieldContainer)
62
+ return;
63
+ const existingErrorMessageElement = fieldContainer.querySelector('.error');
64
+ if (existingErrorMessageElement) {
65
+ existingErrorMessageElement?.parentNode?.removeChild(existingErrorMessageElement);
66
+ }
67
+ }
68
+ showErrorForInvalidField(field) {
69
+ field.insertAdjacentHTML('afterend', this.buildFieldErrorHtml(field));
70
+ }
71
+ buildFieldErrorHtml(field) {
72
+ const data = html `<p class="error">${field.validationMessage}</p>`;
73
+ return this.getRenderString(data);
74
+ }
75
+ get formFields() {
76
+ return Array.from(this.formFieldTargets);
77
+ }
78
+ get firstInvalidField() {
79
+ return this.formFields.find(field => !field.checkValidity());
80
+ }
81
+ }
82
+ AriadneFormWith.targets = ['formField'];
83
+ export default AriadneFormWith;
@@ -0,0 +1,40 @@
1
+ import { Application } from '@hotwired/stimulus';
2
+ const application = Application.start();
3
+ application.debug = import.meta.env.DEV;
4
+ window.Stimulus = application;
5
+ const componentModules = import.meta.glob(['../../components/**/component.ts'], { eager: true });
6
+ for (const [path, module] of Object.entries(componentModules)) {
7
+ const dirs = path.split('/');
8
+ // Dropping ../../components and component.ts parts
9
+ const name = dirs
10
+ .slice(3, dirs.length - 1)
11
+ .join('-')
12
+ .replaceAll('_', '-')
13
+ .toLocaleLowerCase();
14
+ application.register(
15
+ // @tag stimulus-id
16
+ `ui-cmp-${name}`, module.default);
17
+ }
18
+ // import AriadneForm from './ariadne-form'
19
+ // import StringMatchController from './string_match_controller/string_match_controller'
20
+ // import EventsController from './events_controller/events_controller'
21
+ // import OptionsController from './options_controller/options_controller'
22
+ // import AccumulatorController from './accumulator_controller/accumulator_controller'
23
+ // import ToggleableController from './toggleable_controller/toggleable_controller'
24
+ // import ClipboardCopyComponent from './clipboard_copy_component/clipboard-copy-component'
25
+ // import SlideoverComponent from './slideover_component/slideover-component'
26
+ // import TabNavComponent from './tab_nav_component/tab-nav-component'
27
+ // import TooltipComponent from './tooltip_component/tooltip-component'
28
+ // import './tab_container_component/tab-container-component'
29
+ // import './time_ago_component/time-ago-component'
30
+ // const application = Application.start()
31
+ // application.register('clipboard-copy-component', ClipboardCopyComponent)
32
+ // application.register('ariadne-form', AriadneForm)
33
+ // application.register('slideover-component', SlideoverComponent)
34
+ // application.register('tab-nav-component', TabNavComponent)
35
+ // application.register('tooltip-component', TooltipComponent)
36
+ // application.register('toggleable', ToggleableController)
37
+ // application.register('accumulator', AccumulatorController)
38
+ // application.register('options', OptionsController)
39
+ // application.register('string-match', StringMatchController)
40
+ // application.register('events', EventsController)
@@ -4,7 +4,7 @@ module Ariadne
4
4
  module Behaviors
5
5
  module Captionable
6
6
  def with_caption(text, **options)
7
- @caption_id = Generate.id
7
+ @caption_id = ::Ariadne.generate_id
8
8
 
9
9
  Ariadne::Behaviors::Caption.new(id: @caption_id, text: text, component: self, **options)
10
10
  end
@@ -4,7 +4,7 @@ module Ariadne
4
4
  module Behaviors
5
5
  module Tooltipable
6
6
  def with_tooltip(text, **options)
7
- @tooltip_id = Generate.id
7
+ @tooltip_id = ::Ariadne.generate_id
8
8
 
9
9
  html_attrs.merge!(
10
10
  "data-ariadne-tooltip-target" => "activator",
@@ -0,0 +1,22 @@
1
+ import { Controller } from '@hotwired/stimulus';
2
+ import type { TemplateResult } from 'lit-html';
3
+ type HTMLFormField = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
4
+ export default class AriadneFormWith extends Controller {
5
+ static targets: string[];
6
+ readonly formFieldTargets: [HTMLFormField];
7
+ connect(): void;
8
+ disconnect(): void;
9
+ onBlur: (event: Event) => void;
10
+ onSubmit: (event: Event) => void;
11
+ validateForm(): boolean;
12
+ validateField(field: HTMLFormField): boolean;
13
+ shouldValidateField(field: HTMLFormField): boolean;
14
+ refreshErrorForInvalidField(field: HTMLFormField, isValid: boolean): void;
15
+ removeExistingErrorMessage(field: HTMLFormField): void;
16
+ showErrorForInvalidField(field: HTMLFormField): void;
17
+ buildFieldErrorHtml(field: HTMLFormField): string;
18
+ get formFields(): HTMLFormField[];
19
+ get firstInvalidField(): HTMLFormField | undefined;
20
+ getRenderString: (data: TemplateResult) => string;
21
+ }
22
+ export {};
@@ -3,6 +3,6 @@
3
3
  # :nocov:
4
4
  module Ariadne
5
5
  module ViewComponents
6
- VERSION = "0.0.79.2"
6
+ VERSION = "0.0.79.4"
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ariadne_view_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.79.2
4
+ version: 0.0.79.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garen J. Torikian
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-25 00:00:00.000000000 Z
11
+ date: 2024-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tailwind_merge
@@ -111,7 +111,7 @@ dependencies:
111
111
  - - "~>"
112
112
  - !ruby/object:Gem::Version
113
113
  version: '0.2'
114
- description:
114
+ description:
115
115
  email:
116
116
  - gjtorikian@yetto.app
117
117
  executables: []
@@ -128,7 +128,9 @@ files:
128
128
  - app/assets/stylesheets/ariadne_view_components.css
129
129
  - app/assets/stylesheets/ariadne_view_components.css.br
130
130
  - app/assets/stylesheets/ariadne_view_components.css.gz
131
+ - app/components/ariadne/ariadne-form.js
131
132
  - app/components/ariadne/ariadne-form.ts
133
+ - app/components/ariadne/ariadne.js
132
134
  - app/components/ariadne/base_component.rb
133
135
  - app/components/ariadne/behaviors/captionable.rb
134
136
  - app/components/ariadne/behaviors/tooltipable.rb
@@ -170,6 +172,7 @@ files:
170
172
  - app/components/ariadne/layout/two_panel/component.rb
171
173
  - app/components/ariadne/layout/wide/component.html.erb
172
174
  - app/components/ariadne/layout/wide/component.rb
175
+ - app/components/ariadne/tmp/components/ariadne/ariadne-form.d.ts
173
176
  - app/components/ariadne/turbo/frame/component.html.erb
174
177
  - app/components/ariadne/turbo/frame/component.rb
175
178
  - app/components/ariadne/turbo/stream_action/component.html.erb
@@ -309,7 +312,7 @@ licenses:
309
312
  - AGPL-3.0-or-later
310
313
  metadata:
311
314
  allowed_push_host: https://rubygems.org
312
- post_install_message:
315
+ post_install_message:
313
316
  rdoc_options: []
314
317
  require_paths:
315
318
  - lib
@@ -324,8 +327,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
324
327
  - !ruby/object:Gem::Version
325
328
  version: '0'
326
329
  requirements: []
327
- rubygems_version: 3.4.6
328
- signing_key:
330
+ rubygems_version: 3.4.21
331
+ signing_key:
329
332
  specification_version: 4
330
333
  summary: ViewComponents + TailwindCSS + Stimulus
331
334
  test_files: []