@studiometa/ui 1.0.0-beta.1 → 1.0.0-rc.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.
Files changed (84) hide show
  1. package/AnchorScrollTo/AnchorScrollTo.d.ts +2 -2
  2. package/AnchorScrollTo/AnchorScrollTo.js +0 -1
  3. package/AnchorScrollTo/AnchorScrollTo.js.map +2 -2
  4. package/Button/Button.twig +12 -9
  5. package/Button/StyledButton.twig +40 -5
  6. package/Button/StyledButtonRounded.twig +12 -42
  7. package/CircularMarquee/CircularMarquee.twig +30 -18
  8. package/Data/DataBind.js +1 -1
  9. package/Data/DataBind.js.map +2 -2
  10. package/Draggable/Draggable.js +7 -2
  11. package/Draggable/Draggable.js.map +2 -2
  12. package/Figure/Figure.d.ts +1 -0
  13. package/Figure/Figure.js.map +2 -2
  14. package/Frame/AbstractFrameTrigger.d.ts +43 -0
  15. package/Frame/AbstractFrameTrigger.js +72 -0
  16. package/Frame/AbstractFrameTrigger.js.map +7 -0
  17. package/Frame/Frame.d.ts +55 -27
  18. package/Frame/Frame.js +132 -138
  19. package/Frame/Frame.js.map +3 -3
  20. package/Frame/FrameAnchor.d.ts +7 -4
  21. package/Frame/FrameAnchor.js +8 -5
  22. package/Frame/FrameAnchor.js.map +2 -2
  23. package/Frame/FrameForm.d.ts +22 -4
  24. package/Frame/FrameForm.js +43 -6
  25. package/Frame/FrameForm.js.map +2 -2
  26. package/Frame/FrameLoader.d.ts +22 -0
  27. package/Frame/FrameLoader.js +22 -0
  28. package/Frame/FrameLoader.js.map +7 -0
  29. package/Frame/FrameTarget.d.ts +6 -17
  30. package/Frame/FrameTarget.js +25 -60
  31. package/Frame/FrameTarget.js.map +2 -2
  32. package/Frame/FrameTriggerLoader.d.ts +13 -0
  33. package/Frame/FrameTriggerLoader.js +13 -0
  34. package/Frame/FrameTriggerLoader.js.map +7 -0
  35. package/Frame/index.d.ts +4 -0
  36. package/Frame/index.js +4 -0
  37. package/Frame/index.js.map +2 -2
  38. package/Frame/types.d.ts +12 -0
  39. package/Frame/types.js +1 -0
  40. package/Frame/types.js.map +7 -0
  41. package/Frame/utils.d.ts +9 -0
  42. package/Frame/utils.js +13 -0
  43. package/Frame/utils.js.map +7 -0
  44. package/LICENSE.md +110 -0
  45. package/Reinsurance/Reinsurance.twig +6 -6
  46. package/Slider/AbstractSliderChild.d.ts +5 -9
  47. package/Slider/AbstractSliderChild.js +0 -11
  48. package/Slider/AbstractSliderChild.js.map +2 -2
  49. package/Slider/Slider.d.ts +23 -30
  50. package/Slider/Slider.js +40 -100
  51. package/Slider/Slider.js.map +2 -2
  52. package/Slider/SliderBtn.d.ts +0 -3
  53. package/Slider/SliderBtn.js +3 -7
  54. package/Slider/SliderBtn.js.map +2 -2
  55. package/Slider/SliderCount.d.ts +0 -2
  56. package/Slider/SliderCount.js +4 -3
  57. package/Slider/SliderCount.js.map +2 -2
  58. package/Slider/SliderDots.d.ts +0 -3
  59. package/Slider/SliderDots.js +6 -7
  60. package/Slider/SliderDots.js.map +2 -2
  61. package/Slider/SliderDrag.d.ts +0 -2
  62. package/Slider/SliderDrag.js +0 -2
  63. package/Slider/SliderDrag.js.map +2 -2
  64. package/Slider/SliderItem.d.ts +10 -26
  65. package/Slider/SliderItem.js +9 -41
  66. package/Slider/SliderItem.js.map +2 -2
  67. package/Tabs/Tabs.twig +73 -9
  68. package/decorators/withTransition.d.ts +4 -0
  69. package/decorators/withTransition.js +40 -45
  70. package/decorators/withTransition.js.map +2 -2
  71. package/index.d.ts +0 -1
  72. package/index.js +0 -1
  73. package/index.js.map +2 -2
  74. package/package.json +4 -3
  75. package/LICENSE +0 -21
  76. package/TableOfContent/TableOfContent.d.ts +0 -39
  77. package/TableOfContent/TableOfContent.js +0 -50
  78. package/TableOfContent/TableOfContent.js.map +0 -7
  79. package/TableOfContent/TableOfContentAnchor.d.ts +0 -36
  80. package/TableOfContent/TableOfContentAnchor.js +0 -54
  81. package/TableOfContent/TableOfContentAnchor.js.map +0 -7
  82. package/TableOfContent/index.d.ts +0 -2
  83. package/TableOfContent/index.js +0 -3
  84. package/TableOfContent/index.js.map +0 -7
@@ -1,5 +1,6 @@
1
1
  import { Base } from '@studiometa/js-toolkit';
2
2
  import type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';
3
+ import { scrollTo } from '@studiometa/js-toolkit/utils';
3
4
  export interface AnchorScrollToProps extends BaseProps {
4
5
  $el: HTMLAnchorElement;
5
6
  }
@@ -10,9 +11,8 @@ export declare class AnchorScrollTo<T extends BaseProps = BaseProps> extends Bas
10
11
  static config: BaseConfig;
11
12
  /**
12
13
  * Get the target selector.
13
- * @returns {string}
14
14
  */
15
- get targetSelector(): string;
15
+ get targetSelector(): Parameters<typeof scrollTo>[0];
16
16
  /**
17
17
  * Scroll to the target selector on click.
18
18
  */
@@ -6,7 +6,6 @@ class AnchorScrollTo extends Base {
6
6
  };
7
7
  /**
8
8
  * Get the target selector.
9
- * @returns {string}
10
9
  */
11
10
  get targetSelector() {
12
11
  return this.$el.hash;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/ui/AnchorScrollTo/AnchorScrollTo.ts"],
4
- "sourcesContent": ["import { Base } from '@studiometa/js-toolkit';\nimport type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';\nimport { scrollTo } from '@studiometa/js-toolkit/utils';\n\nexport interface AnchorScrollToProps extends BaseProps {\n $el: HTMLAnchorElement;\n}\n\n/**\n * AncorScrollTo class.\n */\nexport class AnchorScrollTo<T extends BaseProps = BaseProps> extends Base<AnchorScrollToProps & T> {\n static config: BaseConfig = {\n name: 'AnchorScrollTo',\n };\n\n /**\n * Get the target selector.\n * @returns {string}\n */\n get targetSelector() {\n return this.$el.hash;\n }\n\n /**\n * Scroll to the target selector on click.\n */\n onClick({ event }: { event: MouseEvent }) {\n try {\n scrollTo(this.targetSelector);\n event.preventDefault();\n } catch {\n // Silence is golden.\n }\n }\n}\n"],
5
- "mappings": "AAAA,SAAS,YAAY;AAErB,SAAS,gBAAgB;AASlB,MAAM,uBAAwD,KAA8B;AAAA,EACjG,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,iBAAiB;AACnB,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,EAAE,MAAM,GAA0B;AACxC,QAAI;AACF,eAAS,KAAK,cAAc;AAC5B,YAAM,eAAe;AAAA,IACvB,QAAQ;AAAA,IAER;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import { Base } from '@studiometa/js-toolkit';\nimport type { BaseProps, BaseConfig } from '@studiometa/js-toolkit';\nimport { scrollTo } from '@studiometa/js-toolkit/utils';\n\nexport interface AnchorScrollToProps extends BaseProps {\n $el: HTMLAnchorElement;\n}\n\n/**\n * AncorScrollTo class.\n */\nexport class AnchorScrollTo<T extends BaseProps = BaseProps> extends Base<AnchorScrollToProps & T> {\n static config: BaseConfig = {\n name: 'AnchorScrollTo',\n };\n\n /**\n * Get the target selector.\n */\n get targetSelector(): Parameters<typeof scrollTo>[0] {\n return this.$el.hash;\n }\n\n /**\n * Scroll to the target selector on click.\n */\n onClick({ event }: { event: MouseEvent }) {\n try {\n scrollTo(this.targetSelector);\n event.preventDefault();\n } catch {\n // Silence is golden.\n }\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,YAAY;AAErB,SAAS,gBAAgB;AASlB,MAAM,uBAAwD,KAA8B;AAAA,EACjG,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,iBAAiD;AACnD,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,EAAE,MAAM,GAA0B;AACxC,QAAI;AACF,eAAS,KAAK,cAAc;AAC5B,YAAM,eAAe;AAAA,IACvB,QAAQ;AAAA,IAER;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -9,7 +9,6 @@
9
9
  * @param array $attr
10
10
  * @param string $icon
11
11
  * @param array $icon_attr
12
- * @param array|string $icon_classes
13
12
  * @param 'start'|'end' $icon_position
14
13
  * @param boolean $icon_only
15
14
  */
@@ -34,26 +33,30 @@
34
33
  href: tag == 'a' and href is defined ? href : false,
35
34
  aria_label: icon_only ? label : false
36
35
  },
37
- { class: ['btn'] }
36
+ {
37
+ class: ['btn']
38
+ }
38
39
  )
39
40
  %}
40
41
 
41
42
  {% set rendered_icon %}
42
43
  {% block icon %}
43
- {# @TODO: Breaking change -> Delete icon_classes to use only icon_attr #}
44
44
  {% include '@ui/Icon/Icon.twig' with {
45
45
  name: icon ?? '',
46
46
  attr: merge_html_attributes(
47
47
  icon_attr ?? null,
48
48
  {
49
- class: {
50
- 'mr-3': not icon_only and icon_position == 'start',
51
- 'ml-3': not icon_only and icon_position == 'end',
52
- }
49
+ class: [
50
+ 'h-[0.75lh]',
51
+ {
52
+ 'mr-3': not icon_only and icon_position == 'start',
53
+ 'ml-3': not icon_only and icon_position == 'end'
54
+ }
55
+ ]
53
56
  },
54
57
  {
55
- class: icon_classes ?? '',
56
- },
58
+ class: '[&>svg]:w-full [&>svg]:h-full'
59
+ }
57
60
  )
58
61
  } %}
59
62
  {% endblock %}
@@ -4,30 +4,46 @@
4
4
  * Styled button.
5
5
  *
6
6
  * @param 'primary'|'secondary'|'tertiary' $theme
7
+ * @param boolean $icon_only
8
+ * @param 's'|'m'|'l' $size
7
9
  */
8
10
  #}
9
11
 
10
12
  {% extends '@ui/Button/Button.twig' %}
11
13
 
12
- {% set icon_only = icon_only|default(false) %}
14
+ {% set icon_position = icon_position ?? 'start' %}
15
+ {% set icon_only = icon_only ?? false %}
13
16
 
14
17
  {% set theme = theme|default('primary') %}
15
18
 
19
+ {% set size = size ?? 'm' %}
20
+ {% if size not in ['s', 'm', 'l'] %}
21
+ {% set size = 'm' %}
22
+ {% endif %}
23
+
16
24
  {% set theme_shared = [
17
25
  'rounded cursor-pointer transition',
18
26
  'disabled:cursor-not-allowed',
19
27
  {
20
28
  'inline-block': icon is not defined,
21
29
  'inline-flex items-center': icon is defined,
22
- 'px-6 py-4': not icon_only,
23
- 'p-4': icon_only
30
+ 'px-6 py-4': size == 'l' and not icon_only,
31
+ 'px-3 py-2': size == 'm' and not icon_only,
32
+ 'px-2.5 py-1.5': size == 's' and not icon_only,
33
+ 'p-4': size == 'l' and icon_only,
34
+ 'p-3': size == 'm' and icon_only,
35
+ 'p-2': size == 's' and icon_only,
36
+ 'text-sm': size == 's'
24
37
  }
25
38
  ] %}
26
39
 
27
- {% set theme_primary = ['text-white bg-black', 'hover:bg-opacity-75 disabled:bg-opacity-50'] %}
40
+ {% set theme_primary = [
41
+ 'text-white bg-black dark:text-black dark:bg-white',
42
+ 'hover:bg-opacity-75 disabled:bg-opacity-50'
43
+ ] %}
28
44
 
29
45
  {% set theme_secondary = [
30
- 'ring ring-inset ring-2 ring-black ring-opacity-25',
46
+ 'ring ring-inset ring-2 ring-black dark:ring-white ring-opacity-25 dark:ring-opacity-25',
31
47
  {
32
48
  'hover:ring-opacity-100': (attr is defined and attr.disabled is not defined)
33
49
  or attr is not defined
@@ -47,3 +63,22 @@
47
63
  }
48
64
  )
49
65
  %}
66
+
67
+ {% set icon_attr =
68
+ merge_html_attributes(
69
+ icon_attr ?? null,
70
+ {
71
+ class: 'h-[0.75lh]'
72
+ },
73
+ {
74
+ class: {
75
+ 'mr-3': size == 'l' and not icon_only and icon_position == 'start',
76
+ 'ml-3': size == 'l' and not icon_only and icon_position == 'end',
77
+ 'mr-2': size == 'm' and not icon_only and icon_position == 'start',
78
+ 'ml-2': size == 'm' and not icon_only and icon_position == 'end',
79
+ 'mr-1': size == 's' and not icon_only and icon_position == 'start',
80
+ 'ml-1': size == 's' and not icon_only and icon_position == 'end'
81
+ }
82
+ }
83
+ )
84
+ %}
@@ -8,58 +8,28 @@
8
8
  */
9
9
  #}
10
10
 
11
- {% extends '@ui/Button/Button.twig' %}
11
+ {% extends '@ui/Button/StyledButton.twig' %}
12
12
 
13
- {% set icon_only = icon_only|default(false) %}
14
-
15
- {% set theme = theme|default('primary') %}
16
-
17
- {% set theme_shared = [
18
- 'rounded-full cursor-pointer transition',
19
- 'disabled:cursor-not-allowed leading-6',
20
- {
21
- 'inline-block': icon is not defined,
22
- 'inline-flex items-center': icon is defined,
23
- 'px-6 py-4': not icon_only,
24
- 'w-14 relative p-4': icon_only
25
- }
26
- ] %}
27
-
28
- {% set theme_primary = ['text-white bg-black', 'hover:bg-opacity-75 disabled:bg-opacity-50'] %}
29
-
30
- {% set theme_secondary = [
31
- 'ring ring-inset ring-2 ring-black ring-opacity-25',
32
- {
33
- 'hover:ring-opacity-100': (attr is defined and attr.disabled is not defined)
34
- or attr is not defined
35
- }
36
- ] %}
13
+ {% set icon_only = icon_only ?? null %}
37
14
 
38
15
  {% set attr =
39
16
  merge_html_attributes(
40
17
  attr ?? null,
41
18
  null,
42
19
  {
43
- class: [
44
- theme_shared,
45
- theme == 'primary' ? theme_primary : '',
46
- theme == 'secondary' ? theme_secondary : ''
47
- ]
20
+ class: ['rounded-full']
48
21
  }
49
22
  )
50
23
  %}
51
- {% set icon_class = icon_class|default({}) %}
24
+
52
25
  {% if icon_only %}
53
- {% set icon_classes =
54
- icon_classes
55
- |default(['absolute top-1/2 left-1/2 -translate-y-1/2 -translate-x-1/2'])
56
- |merge(icon_class)
26
+ {% set icon_attr =
27
+ merge_html_attributes(
28
+ icon_attr ?? null,
29
+ {
30
+ class: 'h-[0.75lh] aspect-square'
31
+ },
32
+ null
33
+ )
57
34
  %}
58
35
  {% endif %}
59
-
60
- {% block icon %}
61
- {{ parent() }}
62
- {% if icon_only %}
63
- &nbsp;
64
- {% endif %}
65
- {% endblock %}
@@ -3,14 +3,15 @@
3
3
  * @file
4
4
  * Circular Marquee
5
5
  *
6
- * @param {String} id - *required
7
- * @param {Number} outer_radius
8
- * @param {Number} radius
9
- * @param {Number} cx
10
- * @param {Number} cy
11
- * @param {String} content
12
- * @param {Object} content_attr
13
- * @param {Number} sensitivity
6
+ * @param {string} id - *required
7
+ * @param {number} outer_radius
8
+ * @param {number} radius
9
+ * @param {number} cx
10
+ * @param {number} cy
11
+ * @param {string} content
12
+ * @param {array} content_attr
13
+ * @param {number} sensitivity
14
+ * @param array $attr
14
15
  */
15
16
  #}
16
17
 
@@ -30,26 +31,37 @@
30
31
  {% set third = 'a ' ~ radius ~ ',' ~ radius ~ ' 0 1,1 -' ~ diameter ~ ',0' %}
31
32
  {% set d = [first, second, third]|join(' ') %}
32
33
 
33
- {% set default_content_attributes = { 'xlink:href': '#' ~ id } %}
34
+ {% set attributes =
35
+ merge_html_attributes(
36
+ attr ?? null,
37
+ {
38
+ data_component: 'CircularMarquee',
39
+ data_option_sensitivity: sensitivity ?? null
40
+ },
41
+ {}
42
+ )
43
+ %}
44
+
34
45
  {% set content_attributes =
35
- merge_html_attributes(default_content_attributes, content_attr|default({}))
46
+ merge_html_attributes(
47
+ content_attr ?? null,
48
+ {},
49
+ {
50
+ 'xlink:href': '#' ~ id
51
+ }
52
+ )
36
53
  %}
37
54
 
38
- <div data-component="CircularMarquee"
39
- {{ html_attributes({ data_option_sensitivity: sensitivity ?? null }) }}>
55
+ <div {{ html_attributes(attributes) }}>
40
56
  <svg aria-hidden="true"
41
57
  xmlns="http://www.w3.org/2000/svg"
42
58
  viewBox="0 0 {{ outer_diameter }} {{ outer_diameter }}"
43
59
  width="{{ outer_diameter }}"
44
60
  height="{{ outer_diameter }}"
45
61
  class="z-default relative left-1/2 -translate-x-1/2">
46
- <defs>
47
- <path d="{{ d }}" id="{{ id }}" />
48
- </defs>
62
+ <defs><path d="{{ d }}" id="{{ id }}" /></defs>
49
63
  <text dy="0" textLength="{{ perimeter }}">
50
- <textPath {{ html_attributes(content_attributes) }}>
51
- {{ content|raw }}
52
- </textPath>
64
+ <textPath {{ html_attributes(content_attributes) }}>{{ content|raw }}</textPath>
53
65
  </text>
54
66
  </svg>
55
67
  </div>
package/Data/DataBind.js CHANGED
@@ -31,7 +31,7 @@ class DataBind extends Base {
31
31
  return this.$options.prop;
32
32
  }
33
33
  const { target } = this;
34
- if (target instanceof HTMLInputElement) {
34
+ if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {
35
35
  return "value";
36
36
  }
37
37
  return "textContent";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/ui/Data/DataBind.ts"],
4
- "sourcesContent": ["import { Base } from '@studiometa/js-toolkit';\nimport type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';\nimport { isArray } from '@studiometa/js-toolkit/utils';\nimport { isInput, isCheckbox, isSelect } from './utils.js';\n\nconst groups = new Map<string, Set<DataBind>>();\n\nexport interface DataBindProps extends BaseProps {\n $options: {\n prop: string;\n group: string;\n };\n}\n\nexport class DataBind<T extends BaseProps = BaseProps> extends Base<DataBindProps & T> {\n static config: BaseConfig = {\n name: 'DataBind',\n options: {\n prop: String,\n group: String,\n },\n };\n\n get relatedInstances() {\n const { group } = this.$options;\n\n const instances = groups.get(group) ?? groups.set(group, new Set()).get(group);\n\n for (const instance of instances) {\n if (!instance.$el.isConnected) {\n instances.delete(instance);\n }\n }\n\n return instances;\n }\n\n get multiple() {\n return this.$options.group.endsWith('[]');\n }\n\n get target() {\n return this.$el;\n }\n\n get prop() {\n if (this.$options.prop) {\n return this.$options.prop;\n }\n\n const { target } = this;\n if (target instanceof HTMLInputElement) {\n return 'value';\n }\n\n return 'textContent';\n }\n\n get value() {\n return this.get();\n }\n\n set value(value) {\n this.set(value);\n }\n\n get() {\n const { target, multiple } = this;\n\n if (isSelect(target)) {\n if (multiple) {\n const values = [];\n // @ts-ignore\n for (const option of target.options) {\n if (option.selected) {\n values.push(option.value);\n }\n }\n\n return values;\n }\n\n const option = target.options.item(target.selectedIndex);\n return option.value;\n }\n\n if (isCheckbox(target)) {\n if (multiple) {\n const values = new Set();\n for (const instance of this.relatedInstances) {\n if (isCheckbox(instance.target) && instance.target.checked) {\n values.add(instance.target.value);\n }\n }\n return Array.from(values);\n } else {\n return target.checked;\n }\n }\n\n return target[this.prop];\n }\n\n set(value: boolean | string | string[], dispatch = true) {\n const { target, multiple, relatedInstances } = this;\n\n if (dispatch) {\n for (const instance of relatedInstances) {\n if (instance !== this && instance.value !== value) {\n instance.set(value, false);\n }\n }\n }\n\n if (isSelect(target)) {\n // @ts-ignore\n for (const option of target.options) {\n option.selected =\n multiple && isArray(value) ? value.includes(option.value) : option.value === value;\n }\n return;\n }\n\n if (isInput(target)) {\n switch (target.type) {\n case 'radio':\n target.checked = target.value === value;\n return;\n case 'checkbox':\n target.checked =\n multiple && isArray(value) ? value.includes(target.value) : Boolean(value);\n return;\n }\n }\n\n target[this.prop] = value;\n }\n\n mounted() {\n this.relatedInstances.add(this);\n }\n\n destroyed() {\n this.relatedInstances.delete(this);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Base } from '@studiometa/js-toolkit';\nimport type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';\nimport { isArray } from '@studiometa/js-toolkit/utils';\nimport { isInput, isCheckbox, isSelect } from './utils.js';\n\nconst groups = new Map<string, Set<DataBind>>();\n\nexport interface DataBindProps extends BaseProps {\n $options: {\n prop: string;\n group: string;\n };\n}\n\nexport class DataBind<T extends BaseProps = BaseProps> extends Base<DataBindProps & T> {\n static config: BaseConfig = {\n name: 'DataBind',\n options: {\n prop: String,\n group: String,\n },\n };\n\n get relatedInstances() {\n const { group } = this.$options;\n\n const instances = groups.get(group) ?? groups.set(group, new Set()).get(group);\n\n for (const instance of instances) {\n if (!instance.$el.isConnected) {\n instances.delete(instance);\n }\n }\n\n return instances;\n }\n\n get multiple() {\n return this.$options.group.endsWith('[]');\n }\n\n get target() {\n return this.$el;\n }\n\n get prop() {\n if (this.$options.prop) {\n return this.$options.prop;\n }\n\n const { target } = this;\n if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {\n return 'value';\n }\n\n return 'textContent';\n }\n\n get value() {\n return this.get();\n }\n\n set value(value) {\n this.set(value);\n }\n\n get() {\n const { target, multiple } = this;\n\n if (isSelect(target)) {\n if (multiple) {\n const values = [];\n // @ts-ignore\n for (const option of target.options) {\n if (option.selected) {\n values.push(option.value);\n }\n }\n\n return values;\n }\n\n const option = target.options.item(target.selectedIndex);\n return option.value;\n }\n\n if (isCheckbox(target)) {\n if (multiple) {\n const values = new Set();\n for (const instance of this.relatedInstances) {\n if (isCheckbox(instance.target) && instance.target.checked) {\n values.add(instance.target.value);\n }\n }\n return Array.from(values);\n } else {\n return target.checked;\n }\n }\n\n return target[this.prop];\n }\n\n set(value: boolean | string | string[], dispatch = true) {\n const { target, multiple, relatedInstances } = this;\n\n if (dispatch) {\n for (const instance of relatedInstances) {\n if (instance !== this && instance.value !== value) {\n instance.set(value, false);\n }\n }\n }\n\n if (isSelect(target)) {\n // @ts-ignore\n for (const option of target.options) {\n option.selected =\n multiple && isArray(value) ? value.includes(option.value) : option.value === value;\n }\n return;\n }\n\n if (isInput(target)) {\n switch (target.type) {\n case 'radio':\n target.checked = target.value === value;\n return;\n case 'checkbox':\n target.checked =\n multiple && isArray(value) ? value.includes(target.value) : Boolean(value);\n return;\n }\n }\n\n target[this.prop] = value;\n }\n\n mounted() {\n this.relatedInstances.add(this);\n }\n\n destroyed() {\n this.relatedInstances.delete(this);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["option"]
7
7
  }
@@ -1,5 +1,5 @@
1
1
  import { Base, withDrag } from "@studiometa/js-toolkit";
2
- import { matrix } from "@studiometa/js-toolkit/utils";
2
+ import { domScheduler, transform } from "@studiometa/js-toolkit/utils";
3
3
  class Draggable extends withDrag(Base) {
4
4
  /**
5
5
  * Config.
@@ -34,7 +34,12 @@ class Draggable extends withDrag(Base) {
34
34
  }
35
35
  this.x = this.originX + props.x - props.origin.x;
36
36
  this.y = this.originY + props.y - props.origin.y;
37
- this.$el.style.transform = matrix({ translateX: this.x, translateY: this.y });
37
+ domScheduler.write(() => {
38
+ transform(this.$el, {
39
+ x: this.x,
40
+ y: this.y
41
+ });
42
+ });
38
43
  }
39
44
  }
40
45
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/ui/Draggable/Draggable.ts"],
4
- "sourcesContent": ["import { Base, withDrag } from '@studiometa/js-toolkit';\nimport type { BaseProps, BaseConfig, DragServiceProps } from '@studiometa/js-toolkit';\nimport { matrix } from '@studiometa/js-toolkit/utils';\n\n/**\n * Draggable class.\n */\nexport class Draggable<T extends BaseProps = BaseProps> extends withDrag(Base)<T> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'DraggableElement',\n };\n\n /**\n * Horizontal transformation.\n */\n x = 0;\n\n /**\n * Vertical transformation.\n */\n y = 0;\n\n /**\n * Horizontal position origin.\n */\n originX = 0;\n\n /**\n * Vertical position origin.\n */\n originY = 0;\n\n /**\n * Drag service hook.\n */\n dragged(props: DragServiceProps) {\n if (props.mode === 'start') {\n this.originX = this.x;\n this.originY = this.y;\n return;\n }\n\n this.x = this.originX + props.x - props.origin.x;\n this.y = this.originY + props.y - props.origin.y;\n\n this.$el.style.transform = matrix({ translateX: this.x, translateY: this.y });\n }\n}\n"],
5
- "mappings": "AAAA,SAAS,MAAM,gBAAgB;AAE/B,SAAS,cAAc;AAKhB,MAAM,kBAAmD,SAAS,IAAI,EAAK;AAAA;AAAA;AAAA;AAAA,EAIhF,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI;AAAA;AAAA;AAAA;AAAA,EAKJ,IAAI;AAAA;AAAA;AAAA;AAAA,EAKJ,UAAU;AAAA;AAAA;AAAA;AAAA,EAKV,UAAU;AAAA;AAAA;AAAA;AAAA,EAKV,QAAQ,OAAyB;AAC/B,QAAI,MAAM,SAAS,SAAS;AAC1B,WAAK,UAAU,KAAK;AACpB,WAAK,UAAU,KAAK;AACpB;AAAA,IACF;AAEA,SAAK,IAAI,KAAK,UAAU,MAAM,IAAI,MAAM,OAAO;AAC/C,SAAK,IAAI,KAAK,UAAU,MAAM,IAAI,MAAM,OAAO;AAE/C,SAAK,IAAI,MAAM,YAAY,OAAO,EAAE,YAAY,KAAK,GAAG,YAAY,KAAK,EAAE,CAAC;AAAA,EAC9E;AACF;",
4
+ "sourcesContent": ["import { Base, withDrag } from '@studiometa/js-toolkit';\nimport type { BaseProps, BaseConfig, DragServiceProps } from '@studiometa/js-toolkit';\nimport { domScheduler, transform } from '@studiometa/js-toolkit/utils';\n\n/**\n * Draggable class.\n */\nexport class Draggable<T extends BaseProps = BaseProps> extends withDrag(Base)<T> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'DraggableElement',\n };\n\n /**\n * Horizontal transformation.\n */\n x = 0;\n\n /**\n * Vertical transformation.\n */\n y = 0;\n\n /**\n * Horizontal position origin.\n */\n originX = 0;\n\n /**\n * Vertical position origin.\n */\n originY = 0;\n\n /**\n * Drag service hook.\n */\n dragged(props: DragServiceProps) {\n if (props.mode === 'start') {\n this.originX = this.x;\n this.originY = this.y;\n return;\n }\n\n this.x = this.originX + props.x - props.origin.x;\n this.y = this.originY + props.y - props.origin.y;\n\n domScheduler.write(() => {\n transform(this.$el, {\n x: this.x,\n y: this.y,\n });\n });\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,MAAM,gBAAgB;AAE/B,SAAS,cAAc,iBAAiB;AAKjC,MAAM,kBAAmD,SAAS,IAAI,EAAK;AAAA;AAAA;AAAA;AAAA,EAIhF,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI;AAAA;AAAA;AAAA;AAAA,EAKJ,IAAI;AAAA;AAAA;AAAA;AAAA,EAKJ,UAAU;AAAA;AAAA;AAAA;AAAA,EAKV,UAAU;AAAA;AAAA;AAAA;AAAA,EAKV,QAAQ,OAAyB;AAC/B,QAAI,MAAM,SAAS,SAAS;AAC1B,WAAK,UAAU,KAAK;AACpB,WAAK,UAAU,KAAK;AACpB;AAAA,IACF;AAEA,SAAK,IAAI,KAAK,UAAU,MAAM,IAAI,MAAM,OAAO;AAC/C,SAAK,IAAI,KAAK,UAAU,MAAM,IAAI,MAAM,OAAO;AAE/C,iBAAa,MAAM,MAAM;AACvB,gBAAU,KAAK,KAAK;AAAA,QAClB,GAAG,KAAK;AAAA,QACR,GAAG,KAAK;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;",
6
6
  "names": []
7
7
  }
@@ -5,6 +5,7 @@ export interface FigureProps extends AbstractFigureProps {
5
5
  }
6
6
  /**
7
7
  * Figure class.
8
+ * @see https://ui.studiometa.dev/-/components/Figure/
8
9
  */
9
10
  export declare class Figure<T extends BaseProps = BaseProps> extends AbstractFigure<T> {
10
11
  /**
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../packages/ui/Figure/Figure.ts"],
4
- "sourcesContent": ["import type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';\nimport { AbstractFigure } from './AbstractFigure.js';\nimport type { AbstractFigureProps } from './AbstractFigure.js';\n\nexport interface FigureProps extends AbstractFigureProps {}\n\n/**\n * Figure class.\n */\nexport class Figure<T extends BaseProps = BaseProps> extends AbstractFigure<T> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n ...AbstractFigure.config,\n name: 'Figure',\n };\n\n /**\n * Terminate the component on load.\n */\n onLoad() {\n this.$terminate();\n }\n}\n"],
5
- "mappings": "AACA,SAAS,sBAAsB;AAQxB,MAAM,eAAgD,eAAkB;AAAA;AAAA;AAAA;AAAA,EAI7E,OAAO,SAAqB;AAAA,IAC1B,GAAG,eAAe;AAAA,IAClB,MAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS;AACP,SAAK,WAAW;AAAA,EAClB;AACF;",
4
+ "sourcesContent": ["import type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';\nimport { AbstractFigure } from './AbstractFigure.js';\nimport type { AbstractFigureProps } from './AbstractFigure.js';\n\nexport interface FigureProps extends AbstractFigureProps {}\n\n/**\n * Figure class.\n * @see https://ui.studiometa.dev/-/components/Figure/\n */\nexport class Figure<T extends BaseProps = BaseProps> extends AbstractFigure<T> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n ...AbstractFigure.config,\n name: 'Figure',\n };\n\n /**\n * Terminate the component on load.\n */\n onLoad() {\n this.$terminate();\n }\n}\n"],
5
+ "mappings": "AACA,SAAS,sBAAsB;AASxB,MAAM,eAAgD,eAAkB;AAAA;AAAA;AAAA;AAAA,EAI7E,OAAO,SAAqB;AAAA,IAC1B,GAAG,eAAe;AAAA,IAClB,MAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS;AACP,SAAK,WAAW;AAAA,EAClB;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,43 @@
1
+ import { Base } from '@studiometa/js-toolkit';
2
+ import type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';
3
+ import type { FrameRequestInit } from './types.js';
4
+ import { FrameTriggerLoader } from './FrameTriggerLoader.js';
5
+ export interface AbstractFrameTriggerProps extends BaseProps {
6
+ $el: HTMLFormElement | HTMLAnchorElement;
7
+ $options: {
8
+ requestInit: RequestInit;
9
+ headers: Record<string, string>;
10
+ };
11
+ $children: {
12
+ FrameTriggerLoader: FrameTriggerLoader[];
13
+ };
14
+ }
15
+ /**
16
+ * AbstractFrameTrigger class.
17
+ */
18
+ export declare class AbstractFrameTrigger<T extends BaseProps = BaseProps> extends Base<T & AbstractFrameTriggerProps> {
19
+ /**
20
+ * Config.
21
+ */
22
+ static config: BaseConfig;
23
+ /**
24
+ * The URL to use for the request.
25
+ */
26
+ get url(): URL;
27
+ /**
28
+ * Option for the fetch request.
29
+ */
30
+ get requestInit(): FrameRequestInit;
31
+ /**
32
+ * Trigger FrameLoaders enter.
33
+ */
34
+ onFrameFetchBefore(): void;
35
+ /**
36
+ * Trigger FrameLoaders leave.
37
+ */
38
+ onFrameFetchAfter(): void;
39
+ /**
40
+ * Trigger request.
41
+ */
42
+ trigger(): Promise<void>;
43
+ }
@@ -0,0 +1,72 @@
1
+ import { Base, getClosestParent } from "@studiometa/js-toolkit";
2
+ import { EVENTS } from "./utils.js";
3
+ import { FrameTriggerLoader } from "./FrameTriggerLoader.js";
4
+ class AbstractFrameTrigger extends Base {
5
+ /**
6
+ * Config.
7
+ */
8
+ static config = {
9
+ name: "AbstractFrameTrigger",
10
+ emits: Object.values(EVENTS),
11
+ options: {
12
+ requestInit: Object,
13
+ headers: Object
14
+ },
15
+ components: {
16
+ FrameTriggerLoader
17
+ }
18
+ };
19
+ /**
20
+ * The URL to use for the request.
21
+ */
22
+ get url() {
23
+ return new URL(this.$el instanceof HTMLFormElement ? this.$el.action : this.$el.href);
24
+ }
25
+ /**
26
+ * Option for the fetch request.
27
+ */
28
+ get requestInit() {
29
+ const { requestInit, headers } = this.$options;
30
+ return {
31
+ ...requestInit,
32
+ // @ts-expect-error this will be right.
33
+ trigger: this,
34
+ headers: {
35
+ ...requestInit.headers,
36
+ ...headers
37
+ }
38
+ };
39
+ }
40
+ /**
41
+ * Trigger FrameLoaders enter.
42
+ */
43
+ onFrameFetchBefore() {
44
+ for (const loader of this.$children.FrameTriggerLoader) {
45
+ if (getClosestParent(loader, this.constructor) === this) {
46
+ loader.enter();
47
+ }
48
+ }
49
+ }
50
+ /**
51
+ * Trigger FrameLoaders leave.
52
+ */
53
+ onFrameFetchAfter() {
54
+ for (const loader of this.$children.FrameTriggerLoader) {
55
+ if (getClosestParent(loader, this.constructor) === this) {
56
+ loader.leave();
57
+ }
58
+ }
59
+ }
60
+ /**
61
+ * Trigger request.
62
+ */
63
+ async trigger() {
64
+ const { url, requestInit } = this;
65
+ this.$log("trigger", url, requestInit);
66
+ this.$emit(EVENTS.TRIGGER, url, requestInit);
67
+ }
68
+ }
69
+ export {
70
+ AbstractFrameTrigger
71
+ };
72
+ //# sourceMappingURL=AbstractFrameTrigger.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../packages/ui/Frame/AbstractFrameTrigger.ts"],
4
+ "sourcesContent": ["import { Base, getClosestParent } from '@studiometa/js-toolkit';\nimport type { BaseConfig, BaseProps } from '@studiometa/js-toolkit';\nimport type { FrameRequestInit } from './types.js';\nimport { EVENTS } from './utils.js';\nimport { FrameTriggerLoader } from './FrameTriggerLoader.js';\n\nexport interface AbstractFrameTriggerProps extends BaseProps {\n $el: HTMLFormElement | HTMLAnchorElement;\n $options: {\n requestInit: RequestInit;\n headers: Record<string, string>;\n };\n $children: {\n FrameTriggerLoader: FrameTriggerLoader[];\n };\n}\n\n/**\n * AbstractFrameTrigger class.\n */\nexport class AbstractFrameTrigger<T extends BaseProps = BaseProps> extends Base<\n T & AbstractFrameTriggerProps\n> {\n /**\n * Config.\n */\n static config: BaseConfig = {\n name: 'AbstractFrameTrigger',\n emits: Object.values(EVENTS),\n options: {\n requestInit: Object,\n headers: Object,\n },\n components: {\n FrameTriggerLoader,\n },\n };\n\n /**\n * The URL to use for the request.\n */\n get url(): URL {\n return new URL(this.$el instanceof HTMLFormElement ? this.$el.action : this.$el.href);\n }\n\n /**\n * Option for the fetch request.\n */\n get requestInit(): FrameRequestInit {\n const { requestInit, headers } = this.$options;\n\n return {\n ...requestInit,\n // @ts-expect-error this will be right.\n trigger: this,\n headers: {\n ...requestInit.headers,\n ...headers,\n },\n };\n }\n\n /**\n * Trigger FrameLoaders enter.\n */\n onFrameFetchBefore() {\n for (const loader of this.$children.FrameTriggerLoader) {\n if (getClosestParent(loader, this.constructor) === this) {\n loader.enter();\n }\n }\n }\n\n /**\n * Trigger FrameLoaders leave.\n */\n onFrameFetchAfter() {\n for (const loader of this.$children.FrameTriggerLoader) {\n if (getClosestParent(loader, this.constructor) === this) {\n loader.leave();\n }\n }\n }\n\n /**\n * Trigger request.\n */\n async trigger() {\n const { url, requestInit } = this;\n this.$log('trigger', url, requestInit);\n this.$emit(EVENTS.TRIGGER, url, requestInit);\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,MAAM,wBAAwB;AAGvC,SAAS,cAAc;AACvB,SAAS,0BAA0B;AAgB5B,MAAM,6BAA8D,KAEzE;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,SAAqB;AAAA,IAC1B,MAAM;AAAA,IACN,OAAO,OAAO,OAAO,MAAM;AAAA,IAC3B,SAAS;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,YAAY;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAW;AACb,WAAO,IAAI,IAAI,KAAK,eAAe,kBAAkB,KAAK,IAAI,SAAS,KAAK,IAAI,IAAI;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,cAAgC;AAClC,UAAM,EAAE,aAAa,QAAQ,IAAI,KAAK;AAEtC,WAAO;AAAA,MACL,GAAG;AAAA;AAAA,MAEH,SAAS;AAAA,MACT,SAAS;AAAA,QACP,GAAG,YAAY;AAAA,QACf,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB;AACnB,eAAW,UAAU,KAAK,UAAU,oBAAoB;AACtD,UAAI,iBAAiB,QAAQ,KAAK,WAAW,MAAM,MAAM;AACvD,eAAO,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB;AAClB,eAAW,UAAU,KAAK,UAAU,oBAAoB;AACtD,UAAI,iBAAiB,QAAQ,KAAK,WAAW,MAAM,MAAM;AACvD,eAAO,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU;AACd,UAAM,EAAE,KAAK,YAAY,IAAI;AAC7B,SAAK,KAAK,WAAW,KAAK,WAAW;AACrC,SAAK,MAAM,OAAO,SAAS,KAAK,WAAW;AAAA,EAC7C;AACF;",
6
+ "names": []
7
+ }