ember-validated-form 4.1.0 → 5.2.0

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 (93) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -1
  2. package/.github/dependabot.yml +11 -0
  3. package/.github/workflows/deploy.yml +1 -1
  4. package/.github/workflows/test.yml +1 -1
  5. package/.husky/commit-msg +6 -0
  6. package/.husky/pre-commit +8 -0
  7. package/CHANGELOG.md +32 -0
  8. package/README.md +2 -2
  9. package/addon/-private/themed-component.js +31 -35
  10. package/addon/components/validated-button/-themes/bootstrap/button.js +7 -9
  11. package/addon/components/validated-button/-themes/uikit/button.js +7 -9
  12. package/addon/components/validated-button/button.hbs +9 -0
  13. package/addon/components/validated-button/button.js +3 -8
  14. package/addon/components/validated-button.hbs +17 -0
  15. package/addon/components/validated-button.js +58 -9
  16. package/addon/components/validated-form.hbs +29 -0
  17. package/addon/components/validated-form.js +49 -43
  18. package/addon/components/validated-input/-themes/bootstrap/error.js +3 -3
  19. package/addon/components/validated-input/-themes/bootstrap/hint.js +3 -3
  20. package/addon/components/validated-input/-themes/bootstrap/label.js +1 -1
  21. package/addon/components/validated-input/-themes/bootstrap/render.js +3 -3
  22. package/addon/components/validated-input/-themes/uikit/error.hbs +4 -0
  23. package/addon/components/validated-input/-themes/uikit/error.js +1 -4
  24. package/addon/components/validated-input/-themes/uikit/hint.js +3 -3
  25. package/addon/components/validated-input/-themes/uikit/label.js +3 -3
  26. package/addon/components/validated-input/-themes/uikit/render.hbs +110 -0
  27. package/addon/components/validated-input/-themes/uikit/render.js +3 -5
  28. package/addon/components/validated-input/error.hbs +1 -0
  29. package/addon/components/validated-input/error.js +6 -7
  30. package/addon/components/validated-input/hint.hbs +1 -0
  31. package/addon/components/validated-input/hint.js +3 -7
  32. package/addon/components/validated-input/label.hbs +3 -0
  33. package/addon/components/validated-input/label.js +3 -8
  34. package/addon/components/validated-input/render.hbs +108 -0
  35. package/addon/components/validated-input/render.js +10 -13
  36. package/addon/components/validated-input/types/-themes/bootstrap/checkbox-group.hbs +19 -0
  37. package/addon/components/validated-input/types/-themes/bootstrap/checkbox-group.js +1 -4
  38. package/addon/components/validated-input/types/-themes/bootstrap/checkbox.hbs +14 -0
  39. package/addon/components/validated-input/types/-themes/bootstrap/checkbox.js +1 -6
  40. package/addon/components/validated-input/types/-themes/bootstrap/input.js +11 -4
  41. package/addon/components/validated-input/types/-themes/bootstrap/radio-group.hbs +20 -0
  42. package/addon/components/validated-input/types/-themes/bootstrap/radio-group.js +1 -4
  43. package/addon/components/validated-input/types/-themes/bootstrap/select.js +11 -4
  44. package/addon/components/validated-input/types/-themes/bootstrap/textarea.js +11 -4
  45. package/addon/components/validated-input/types/-themes/uikit/checkbox-group.hbs +19 -0
  46. package/addon/components/validated-input/types/-themes/uikit/checkbox-group.js +1 -4
  47. package/addon/components/validated-input/types/-themes/uikit/checkbox.hbs +15 -0
  48. package/addon/components/validated-input/types/-themes/uikit/checkbox.js +1 -4
  49. package/addon/components/validated-input/types/-themes/uikit/input.js +11 -4
  50. package/addon/components/validated-input/types/-themes/uikit/radio-group.hbs +20 -0
  51. package/addon/components/validated-input/types/-themes/uikit/radio-group.js +1 -4
  52. package/addon/components/validated-input/types/-themes/uikit/select.js +11 -4
  53. package/addon/components/validated-input/types/-themes/uikit/textarea.js +11 -4
  54. package/addon/components/validated-input/types/checkbox-group.hbs +14 -0
  55. package/addon/components/validated-input/types/checkbox-group.js +9 -11
  56. package/addon/components/validated-input/types/checkbox.hbs +9 -0
  57. package/addon/components/validated-input/types/checkbox.js +10 -6
  58. package/addon/components/validated-input/types/input.hbs +6 -0
  59. package/addon/components/validated-input/types/input.js +9 -17
  60. package/addon/components/validated-input/types/radio-group.hbs +14 -0
  61. package/addon/components/validated-input/types/radio-group.js +10 -6
  62. package/addon/components/validated-input/types/select.hbs +72 -0
  63. package/addon/components/validated-input/types/select.js +118 -6
  64. package/addon/components/validated-input/types/textarea.hbs +7 -0
  65. package/addon/components/validated-input/types/textarea.js +9 -17
  66. package/addon/{templates/components → components}/validated-input.hbs +3 -5
  67. package/addon/components/validated-input.js +1 -10
  68. package/app/components/validated-form.js +1 -7
  69. package/config/environment.js +1 -1
  70. package/package.json +58 -39
  71. package/.dependabot/config.yml +0 -14
  72. package/.husky/precommit +0 -1
  73. package/.prettierignore +0 -1
  74. package/addon/templates/components/validated-button/button.hbs +0 -1
  75. package/addon/templates/components/validated-button.hbs +0 -7
  76. package/addon/templates/components/validated-form.hbs +0 -15
  77. package/addon/templates/components/validated-input/-themes/uikit/render.hbs +0 -108
  78. package/addon/templates/components/validated-input/error.hbs +0 -1
  79. package/addon/templates/components/validated-input/hint.hbs +0 -1
  80. package/addon/templates/components/validated-input/label.hbs +0 -1
  81. package/addon/templates/components/validated-input/render.hbs +0 -107
  82. package/addon/templates/components/validated-input/types/-themes/bootstrap/checkbox-group.hbs +0 -14
  83. package/addon/templates/components/validated-input/types/-themes/bootstrap/checkbox.hbs +0 -10
  84. package/addon/templates/components/validated-input/types/-themes/bootstrap/radio-group.hbs +0 -15
  85. package/addon/templates/components/validated-input/types/-themes/bootstrap/select.hbs +0 -16
  86. package/addon/templates/components/validated-input/types/-themes/uikit/checkbox-group.hbs +0 -15
  87. package/addon/templates/components/validated-input/types/-themes/uikit/checkbox.hbs +0 -11
  88. package/addon/templates/components/validated-input/types/-themes/uikit/radio-group.hbs +0 -17
  89. package/addon/templates/components/validated-input/types/-themes/uikit/select.hbs +0 -17
  90. package/addon/templates/components/validated-input/types/checkbox-group.hbs +0 -14
  91. package/addon/templates/components/validated-input/types/checkbox.hbs +0 -9
  92. package/addon/templates/components/validated-input/types/radio-group.hbs +0 -14
  93. package/addon/templates/components/validated-input/types/select.hbs +0 -16
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: Bug report
3
3
  about: Template for bug reports
4
-
5
4
  ---
6
5
 
7
6
  --
@@ -0,0 +1,11 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: npm
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ day: "friday"
8
+ time: "12:00"
9
+ timezone: "Europe/Zurich"
10
+ open-pull-requests-limit: 10
11
+ versioning-strategy: increase
@@ -25,4 +25,4 @@ jobs:
25
25
  env:
26
26
  CI: true
27
27
  DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }}
28
- ADDON_DOCS_VERSION_PATH: ${GITHUB_REF#refs/heads/}
28
+ ADDON_DOCS_UPDATE_LATEST: true
@@ -67,8 +67,8 @@ jobs:
67
67
  strategy:
68
68
  matrix:
69
69
  scenario:
70
- - ember-lts-3.20
71
70
  - ember-lts-3.24
71
+ - ember-lts-3.28
72
72
  - ember-release
73
73
 
74
74
  steps:
package/.husky/commit-msg CHANGED
@@ -1 +1,7 @@
1
+ #!/bin/sh
2
+ . "$(dirname "$0")/_/husky.sh"
3
+
4
+ # skip in CI
5
+ [ -n "$CI" ] && exit 0
6
+
1
7
  yarn commitlint --edit $1
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+ . "$(dirname "$0")/_/husky.sh"
3
+
4
+ # skip in CI
5
+ [ -n "$CI" ] && exit 0
6
+
7
+ # lint only staged files
8
+ yarn lint-staged
package/CHANGELOG.md CHANGED
@@ -1,3 +1,35 @@
1
+ # [5.2.0](https://github.com/adfinis-sygroup/ember-validated-form/compare/v5.1.1...v5.2.0) (2022-02-03)
2
+
3
+
4
+ ### Features
5
+
6
+ * scroll first invalid element into view ([#733](https://github.com/adfinis-sygroup/ember-validated-form/issues/733)) ([ae7c8b2](https://github.com/adfinis-sygroup/ember-validated-form/commit/ae7c8b2b160307646adf90cd09a091effa549238))
7
+ * **validated-button:** add `triggerValidations` flag ([#721](https://github.com/adfinis-sygroup/ember-validated-form/issues/721)) ([765f5f4](https://github.com/adfinis-sygroup/ember-validated-form/commit/765f5f40c9d2e5ccfca7129fb701ff3bb0ed661e))
8
+
9
+ # [5.0.0](https://github.com/adfinis-sygroup/ember-validated-form/compare/v4.1.0...v5.0.0) (2021-10-08)
10
+
11
+
12
+ ### chore
13
+
14
+ * **deps:** update ember and other dependencies ([41e099c](https://github.com/adfinis-sygroup/ember-validated-form/commit/41e099c4da82135c562493e5b2a4f9420dca73c6))
15
+ * **ember:** remove support for ember 3.20 ([0cfebfc](https://github.com/adfinis-sygroup/ember-validated-form/commit/0cfebfcc5792a1df52093a972878af1617ec8100))
16
+
17
+
18
+ ### Features
19
+
20
+ * refactor all components to glimmer and use native classes ([cee7373](https://github.com/adfinis-sygroup/ember-validated-form/commit/cee7373a3c0783a02fe00b5e510c41ba604403c2))
21
+
22
+
23
+ ### BREAKING CHANGES
24
+
25
+ * **ember:** Remove support for ember LTS 3.20 since that version
26
+ has a bug with autotracking.
27
+ * **deps:** Require `ember-auto-import` v2+
28
+ * While the public API won't change, there is a huge
29
+ chance that this will break implementations if someone's extending the
30
+ components of this addon. Components that do need to be refactored to
31
+ glimmer.
32
+
1
33
  # [4.1.0](https://github.com/adfinis-sygroup/ember-validated-form/compare/v4.0.1...v4.1.0) (2021-09-30)
2
34
 
3
35
 
package/README.md CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  [![npm version](https://badge.fury.io/js/ember-validated-form.svg)](https://badge.fury.io/js/ember-validated-form)
4
4
  [![Ember Observer Score](https://emberobserver.com/badges/ember-validated-form.svg)](https://emberobserver.com/addons/ember-validated-form)
5
- [![Build Status](https://travis-ci.org/adfinis-sygroup/ember-validated-form.svg?branch=main)](https://travis-ci.org/adfinis-sygroup/ember-validated-form)
6
- [![Code style](https://img.shields.io/badge/code_style-prettier-red.svg)](https://github.com/prettier/prettier)
5
+ [![Test](https://github.com/adfinis-sygroup/ember-validated-form/workflows/Test/badge.svg)](https://github.com/adfinis-sygroup/ember-validated-form/actions?query=workflow%3ATest)
6
+ [![Code Style: Prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
7
7
 
8
8
  Easily create forms with client side validations.
9
9
 
@@ -1,42 +1,38 @@
1
1
  import { getOwner } from "@ember/application";
2
- import { computed, get, set } from "@ember/object";
3
2
 
4
- export default (component) => {
5
- return computed({
6
- get() {
7
- const parts = component.split("/");
8
- const componentNameParts = parts.slice(1, parts.length).join("/");
3
+ export default function (component) {
4
+ return function (_, propertyName) {
5
+ return {
6
+ get() {
7
+ const parts = component.split("/");
8
+ const componentName = parts.slice(1, parts.length).join("/");
9
9
 
10
- if (get(this, `overrideComponents.${componentNameParts}`)) {
11
- return get(this, `overrideComponents.${componentNameParts}`);
12
- }
10
+ if (this.args[propertyName]) {
11
+ return this.args[propertyName];
12
+ }
13
13
 
14
- const config =
15
- getOwner(this).resolveRegistration("config:environment")[
16
- "ember-validated-form"
17
- ] !== undefined
18
- ? getOwner(this).resolveRegistration("config:environment")[
19
- "ember-validated-form"
20
- ]
21
- : {};
14
+ const config =
15
+ getOwner(this).resolveRegistration("config:environment")[
16
+ "ember-validated-form"
17
+ ] !== undefined
18
+ ? getOwner(this).resolveRegistration("config:environment")[
19
+ "ember-validated-form"
20
+ ]
21
+ : {};
22
22
 
23
- const theme = config.theme;
24
- const defaultComponent = get(config, `defaults.${componentNameParts}`);
23
+ const theme = config.theme;
24
+ const defaultComponent = config.defaults?.[componentName];
25
25
 
26
- const name = parts.pop();
27
- const basePath = parts.join("/");
26
+ const name = parts.pop();
27
+ const basePath = parts.join("/");
28
28
 
29
- return (
30
- defaultComponent ||
31
- (theme ? `${basePath}/-themes/${theme}/${name}` : `${basePath}/${name}`)
32
- );
33
- },
34
- set(key, value) {
35
- if (!get(this, `overrideComponents`)) {
36
- set(this, `overrideComponents`, {});
37
- }
38
- set(this, `overrideComponents.${key}`, value);
39
- return value;
40
- },
41
- });
42
- };
29
+ return (
30
+ defaultComponent ||
31
+ (theme
32
+ ? `${basePath}/-themes/${theme}/${name}`
33
+ : `${basePath}/${name}`)
34
+ );
35
+ },
36
+ };
37
+ };
38
+ }
@@ -1,12 +1,10 @@
1
- import { computed } from "@ember/object";
2
-
3
1
  import Component from "../../button";
4
2
 
5
- export default Component.extend({
6
- classNames: ["btn"],
7
- classNameBindings: ["style"],
3
+ export default class BootstrapButton extends Component {
4
+ get class() {
5
+ const style = this.args.type === "submit" ? "btn-primary" : "btn-default";
6
+ const loading = this.args.loading ? "loading" : "";
8
7
 
9
- style: computed("type", function () {
10
- return this.type === "submit" ? "btn-primary" : "btn-default";
11
- }),
12
- });
8
+ return `btn ${style} ${loading}`;
9
+ }
10
+ }
@@ -1,12 +1,10 @@
1
- import { computed } from "@ember/object";
2
-
3
1
  import Component from "../../button";
4
2
 
5
- export default Component.extend({
6
- classNames: ["uk-button"],
7
- classNameBindings: ["style"],
3
+ export default class UikitButton extends Component {
4
+ get class() {
5
+ const style =
6
+ this.args.type === "submit" ? "uk-button-primary" : "uk-button-default";
8
7
 
9
- style: computed("type", function () {
10
- return this.type === "submit" ? "uk-button-primary" : "uk-button-default";
11
- }),
12
- });
8
+ return `uk-button ${style}`;
9
+ }
10
+ }
@@ -0,0 +1,9 @@
1
+ <button
2
+ class={{this.class}}
3
+ type={{@type}}
4
+ disabled={{@disabled}}
5
+ {{on "click" @onClick}}
6
+ ...attributes
7
+ >
8
+ {{#if (has-block)}}{{~yield~}}{{else}}{{~@label~}}{{/if}}
9
+ </button>
@@ -1,9 +1,4 @@
1
- import Component from "@ember/component";
1
+ import Component from "@glimmer/component";
2
2
 
3
- import layout from "../../templates/components/validated-button/button";
4
-
5
- export default Component.extend({
6
- layout,
7
- tagName: "button",
8
- attributeBindings: ["disabled", "type", "action:onclick"],
9
- });
3
+ // eslint-disable-next-line ember/no-empty-glimmer-component-classes
4
+ export default class ButtonComponent extends Component {}
@@ -0,0 +1,17 @@
1
+ {{#let
2
+ (component
3
+ this.buttonComponent
4
+ onClick=this.click
5
+ loading=this.loading
6
+ disabled=(or @disabled this.loading)
7
+ label=@label
8
+ type=@type
9
+ )
10
+ as |Button|
11
+ }}
12
+ {{#if (has-block)}}
13
+ <Button ...attributes>{{yield}}</Button>
14
+ {{else}}
15
+ <Button ...attributes />
16
+ {{/if}}
17
+ {{/let}}
@@ -1,11 +1,60 @@
1
- import Component from "@ember/component";
1
+ import { action } from "@ember/object";
2
+ import Component from "@glimmer/component";
3
+ import { tracked } from "@glimmer/tracking";
4
+ import { resolve } from "rsvp";
2
5
 
3
6
  import themedComponent from "../-private/themed-component";
4
- import layout from "../templates/components/validated-button";
5
-
6
- export default Component.extend({
7
- layout,
8
- type: "button",
9
- tagName: "",
10
- buttonComponent: themedComponent("validated-button/button"),
11
- });
7
+
8
+ const ON_CLICK = "on-click";
9
+ const ON_INVALID_CLICK = "on-invalid-click";
10
+ export default class ValidatedButtonComponent extends Component {
11
+ @themedComponent("validated-button/button") buttonComponent;
12
+
13
+ @tracked _loading;
14
+
15
+ get loading() {
16
+ return this.args.loading || this._loading;
17
+ }
18
+
19
+ @action
20
+ async click(event) {
21
+ // handle only clicks for custom buttons
22
+ // everything else is handled by the validated form itself
23
+ if (this.args.type !== "button") {
24
+ return this.args.action(event);
25
+ }
26
+
27
+ event.preventDefault();
28
+
29
+ if (this.args.triggerValidations) {
30
+ this.args.markAsDirty();
31
+ }
32
+
33
+ const model = this.args.model;
34
+
35
+ if (!model || !model.validate) {
36
+ this.runCallback(ON_CLICK);
37
+ return;
38
+ }
39
+
40
+ await model.validate();
41
+
42
+ if (model.get("isInvalid")) {
43
+ this.runCallback(ON_INVALID_CLICK);
44
+ } else {
45
+ this.runCallback(ON_CLICK);
46
+ }
47
+ }
48
+
49
+ runCallback(callbackProp) {
50
+ const callback = this.args[callbackProp];
51
+ if (typeof callback !== "function") {
52
+ return;
53
+ }
54
+
55
+ this._loading = true;
56
+ resolve(callback(this.args.model)).finally(() => {
57
+ this._loading = false;
58
+ });
59
+ }
60
+ }
@@ -0,0 +1,29 @@
1
+ <form autocomplete={{@autocomplete}} class={{if this.submitted "submitted"}}>
2
+ {{yield
3
+ (hash
4
+ model=@model
5
+ loading=this.loading
6
+ input=(component
7
+ "validated-input"
8
+ model=@model
9
+ submitted=this.submitted
10
+ validateBeforeSubmit=@validateBeforeSubmit
11
+ )
12
+ submit=(component
13
+ "validated-button"
14
+ type="submit"
15
+ loading=this.loading
16
+ label="Save"
17
+ action=this.submit
18
+ )
19
+ button=(component
20
+ "validated-button"
21
+ type="button"
22
+ loading=this.loading
23
+ label="Action"
24
+ model=@model
25
+ markAsDirty=this.markAsDirty
26
+ )
27
+ )
28
+ }}
29
+ </form>
@@ -1,70 +1,76 @@
1
- import Component from "@ember/component";
1
+ import { getOwner } from "@ember/application";
2
+ import { action } from "@ember/object";
3
+ import { scheduleOnce } from "@ember/runloop";
4
+ import Component from "@glimmer/component";
5
+ import { tracked } from "@glimmer/tracking";
2
6
  import { resolve } from "rsvp";
3
7
 
4
- import layout from "../templates/components/validated-form";
5
-
6
8
  const PROP_ON_SUBMIT = "on-submit";
7
9
  const PROP_ON_INVALID_SUBMIT = "on-invalid-submit";
8
10
 
9
- export default Component.extend({
10
- tagName: "form",
11
+ export default class ValidatedFormComponent extends Component {
12
+ @tracked loading = false;
13
+ @tracked submitted = false;
14
+ @tracked validateBeforeSubmit = true;
11
15
 
12
- classNameBindings: ["submitted"],
13
- attributeBindings: ["autocomplete"],
16
+ constructor(...args) {
17
+ super(...args);
18
+ this.config =
19
+ getOwner(this).resolveRegistration("config:environment")[
20
+ "ember-validated-form"
21
+ ];
14
22
 
15
- loading: false,
23
+ if (this.args.model && this.args.model.validate) {
24
+ scheduleOnce("actions", this, "validateModel", this.args.model);
25
+ }
26
+ }
16
27
 
17
- submitted: false,
28
+ validateModel(model) {
29
+ model.validate();
30
+ }
18
31
 
19
- layout,
32
+ @action
33
+ markAsDirty() {
34
+ this.submitted = true;
35
+ }
20
36
 
21
- validateBeforeSubmit: true,
37
+ @action
38
+ async submit(event) {
39
+ event.preventDefault();
22
40
 
23
- init(...args) {
24
- this._super(...args);
25
- if (this.model && this.model.validate) {
26
- this.model.validate();
27
- }
28
- },
29
-
30
- submit() {
31
- this.set("submitted", true);
32
- const model = this.model;
41
+ this.submitted = true;
42
+ const model = this.args.model;
33
43
 
34
44
  if (!model || !model.validate) {
35
45
  this.runCallback(PROP_ON_SUBMIT);
36
46
  return false;
37
47
  }
38
48
 
39
- model.validate().then(() => {
40
- if (!this.element) {
41
- // We were removed from the DOM while validating
42
- return;
43
- }
49
+ await model.validate();
44
50
 
45
- if (model.get("isInvalid")) {
46
- this.runCallback(PROP_ON_INVALID_SUBMIT);
47
- } else {
48
- this.runCallback(PROP_ON_SUBMIT);
51
+ if (model.get("isInvalid")) {
52
+ if (this.config?.features?.scrollErrorIntoView && model.errors[0]?.key) {
53
+ document
54
+ .querySelector(`[name=${model.errors[0].key}]`)
55
+ ?.scrollIntoView();
49
56
  }
50
- });
57
+ this.runCallback(PROP_ON_INVALID_SUBMIT);
58
+ } else {
59
+ this.runCallback(PROP_ON_SUBMIT);
60
+ }
61
+
51
62
  return false;
52
- },
63
+ }
53
64
 
54
65
  runCallback(callbackProp) {
55
- const callback = this.get(callbackProp);
66
+ const callback = this.args[callbackProp];
56
67
  if (typeof callback !== "function") {
57
68
  return;
58
69
  }
59
- const model = this.model;
60
70
 
61
- this.set("loading", true);
62
- resolve(callback(model)).finally(() => {
63
- if (!this.element) {
64
- // We were removed from the DOM while running on-submit()
65
- return;
66
- }
67
- this.set("loading", false);
71
+ this.loading = true;
72
+ resolve(callback(this.args.model)).finally(() => {
73
+ this.loading = false;
68
74
  });
69
- },
70
- });
75
+ }
76
+ }
@@ -1,5 +1,5 @@
1
1
  import Component from "../../error";
2
2
 
3
- export default Component.extend({
4
- classNames: ["invalid-feedback"],
5
- });
3
+ export default class BootstrapErrorComponent extends Component {
4
+ class = "invalid-feedback";
5
+ }
@@ -1,5 +1,5 @@
1
1
  import Component from "../../hint";
2
2
 
3
- export default Component.extend({
4
- classNames: ["form-text", "text-muted"],
5
- });
3
+ export default class BootstrapHintComponent extends Component {
4
+ class = "form-text text-muted";
5
+ }
@@ -1,3 +1,3 @@
1
1
  import Component from "../../label";
2
2
 
3
- export default Component.extend({});
3
+ export default class BootstrapLabelComponent extends Component {}
@@ -1,5 +1,5 @@
1
1
  import Component from "../../render";
2
2
 
3
- export default Component.extend({
4
- classNames: ["form-group"],
5
- });
3
+ export default class BootstrapRenderComponent extends Component {
4
+ class = "form-group";
5
+ }
@@ -0,0 +1,4 @@
1
+ <small
2
+ class="uk-text-danger"
3
+ ...attributes
4
+ >{{yield}}{{this.errorString}}</small>
@@ -1,6 +1,3 @@
1
1
  import Component from "../../error";
2
2
 
3
- export default Component.extend({
4
- tagName: "small",
5
- classNames: ["uk-text-danger"],
6
- });
3
+ export default class UikitErrorComponent extends Component {}
@@ -1,5 +1,5 @@
1
1
  import Component from "../../hint";
2
2
 
3
- export default Component.extend({
4
- classNames: ["uk-text-muted"],
5
- });
3
+ export default class UikitHintComponent extends Component {
4
+ class = "uk-text-muted";
5
+ }
@@ -1,5 +1,5 @@
1
1
  import Component from "../../label";
2
2
 
3
- export default Component.extend({
4
- classNames: ["uk-form-label"],
5
- });
3
+ export default class UikitLabelComponent extends Component {
4
+ class = "uk-form-label";
5
+ }