@stonecrop/beam 0.30.0 → 0.32.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 (84) hide show
  1. package/dist/assets/index.css +645 -1
  2. package/dist/beam.js +674 -591
  3. package/dist/beam.js.map +1 -1
  4. package/dist/src/components/ActionFooter.vue.d.ts +18 -0
  5. package/dist/src/components/ActionFooter.vue.d.ts.map +1 -0
  6. package/dist/src/components/BeamArrow.vue.d.ts +7 -0
  7. package/dist/src/components/BeamArrow.vue.d.ts.map +1 -0
  8. package/dist/src/components/BeamBtn.vue.d.ts +14 -0
  9. package/dist/src/components/BeamBtn.vue.d.ts.map +1 -0
  10. package/dist/src/components/BeamDayDivider.vue.d.ts +17 -0
  11. package/dist/src/components/BeamDayDivider.vue.d.ts.map +1 -0
  12. package/dist/src/components/BeamFilter.vue.d.ts +13 -0
  13. package/dist/src/components/BeamFilter.vue.d.ts.map +1 -0
  14. package/dist/src/components/BeamFilterOption.vue.d.ts +13 -0
  15. package/dist/src/components/BeamFilterOption.vue.d.ts.map +1 -0
  16. package/dist/src/components/BeamHeading.vue.d.ts +14 -0
  17. package/dist/src/components/BeamHeading.vue.d.ts.map +1 -0
  18. package/dist/src/components/BeamMetadata.vue.d.ts +23 -0
  19. package/dist/src/components/BeamMetadata.vue.d.ts.map +1 -0
  20. package/dist/src/components/BeamModal.vue.d.ts +26 -0
  21. package/dist/src/components/BeamModal.vue.d.ts.map +1 -0
  22. package/dist/src/components/BeamModalOutlet.vue.d.ts +10 -0
  23. package/dist/src/components/BeamModalOutlet.vue.d.ts.map +1 -0
  24. package/dist/src/components/BeamProgress.vue.d.ts +10 -0
  25. package/dist/src/components/BeamProgress.vue.d.ts.map +1 -0
  26. package/dist/src/components/Confirm.vue.d.ts +4 -0
  27. package/dist/src/components/Confirm.vue.d.ts.map +1 -0
  28. package/dist/src/components/FixedTop.vue.d.ts +14 -0
  29. package/dist/src/components/FixedTop.vue.d.ts.map +1 -0
  30. package/dist/src/components/ItemCheck.vue.d.ts +11 -0
  31. package/dist/src/components/ItemCheck.vue.d.ts.map +1 -0
  32. package/dist/src/components/ItemCount.vue.d.ts +19 -0
  33. package/dist/src/components/ItemCount.vue.d.ts.map +1 -0
  34. package/dist/src/components/ListAnchor.vue.d.ts +17 -0
  35. package/dist/src/components/ListAnchor.vue.d.ts.map +1 -0
  36. package/dist/src/components/ListItem.vue.d.ts +12 -0
  37. package/dist/src/components/ListItem.vue.d.ts.map +1 -0
  38. package/dist/src/components/ListView.vue.d.ts +14 -0
  39. package/dist/src/components/ListView.vue.d.ts.map +1 -0
  40. package/dist/src/components/Navbar.vue.d.ts +20 -0
  41. package/dist/src/components/Navbar.vue.d.ts.map +1 -0
  42. package/dist/src/components/ScanInput.vue.d.ts +12 -0
  43. package/dist/src/components/ScanInput.vue.d.ts.map +1 -0
  44. package/dist/src/components/SegmentedDisplay.vue.d.ts +11 -0
  45. package/dist/src/components/SegmentedDisplay.vue.d.ts.map +1 -0
  46. package/dist/src/components/SplitColumn.vue.d.ts +21 -0
  47. package/dist/src/components/SplitColumn.vue.d.ts.map +1 -0
  48. package/dist/src/components/ToggleArrow.vue.d.ts +7 -0
  49. package/dist/src/components/ToggleArrow.vue.d.ts.map +1 -0
  50. package/dist/{tsdoc-metadata.json → src/tsdoc-metadata.json} +1 -1
  51. package/package.json +31 -26
  52. package/dist/beam.d.ts +0 -167
  53. package/dist/beam.tsbuildinfo +0 -1
  54. package/dist/src/composables/mqtt.js +0 -85
  55. package/dist/src/index.js +0 -56
  56. package/dist/src/types/index.js +0 -0
  57. package/src/components/ActionFooter.vue +0 -31
  58. package/src/components/BeamArrow.vue +0 -37
  59. package/src/components/BeamBtn.vue +0 -32
  60. package/src/components/BeamDayDivider.vue +0 -60
  61. package/src/components/BeamFilter.vue +0 -58
  62. package/src/components/BeamFilterOption.vue +0 -150
  63. package/src/components/BeamHeading.vue +0 -17
  64. package/src/components/BeamMetadata.vue +0 -118
  65. package/src/components/BeamModal.vue +0 -28
  66. package/src/components/BeamModalOutlet.vue +0 -18
  67. package/src/components/BeamProgress.vue +0 -23
  68. package/src/components/Confirm.vue +0 -29
  69. package/src/components/FixedTop.vue +0 -13
  70. package/src/components/ItemCheck.vue +0 -76
  71. package/src/components/ItemCount.vue +0 -55
  72. package/src/components/ListAnchor.vue +0 -17
  73. package/src/components/ListItem.vue +0 -85
  74. package/src/components/ListView.vue +0 -62
  75. package/src/components/Navbar.vue +0 -42
  76. package/src/components/ScanInput.vue +0 -23
  77. package/src/components/SegmentedDisplay.vue +0 -55
  78. package/src/components/SplitColumn.vue +0 -49
  79. package/src/components/ToggleArrow.vue +0 -35
  80. package/src/composables/mqtt.ts +0 -102
  81. package/src/index.ts +0 -87
  82. package/src/onscan.d.ts +0 -45
  83. package/src/shims-vue.d.ts +0 -7
  84. package/src/types/index.ts +0 -77
@@ -1,32 +0,0 @@
1
- <template>
2
- <button class="beam_btn">
3
- <slot>Action</slot>
4
- </button>
5
- </template>
6
-
7
- <style scoped>
8
- .beam_btn {
9
- font-size: 0.875rem;
10
- text-align: center;
11
- padding: 0.3125rem 0.75rem;
12
- border: 1px solid var(--sc-btn-border);
13
- color: var(--sc-btn-label-color);
14
- background-color: var(--sc-btn-color);
15
- cursor: pointer;
16
- font-family: var(--sc-font-family);
17
-
18
- &:hover,
19
- &:active {
20
- background-color: var(--sc-btn-hover);
21
- }
22
- }
23
- </style>
24
- <style>
25
- .beam_btn a:link,
26
- .beam_btn a:visited,
27
- .beam_btn a:hover,
28
- .beam_btn a:active {
29
- text-decoration: none;
30
- color: var(--sc-btn-label-color);
31
- }
32
- </style>
@@ -1,60 +0,0 @@
1
- <template>
2
- <div class="beam_day-divider">
3
- <h2>{{ date }}</h2>
4
- </div>
5
-
6
- <slot></slot>
7
- </template>
8
-
9
- <script setup lang="ts">
10
- import { computed } from 'vue'
11
-
12
- import type { ListViewItem } from '../types'
13
-
14
- defineSlots<{ default(): any }>()
15
- const { item } = defineProps<{ item: ListViewItem }>()
16
-
17
- const date = computed(() => {
18
- if (!item.date || isNaN(Date.parse(item.date))) {
19
- return item.date
20
- }
21
-
22
- // if needed, the user can specify a Date format flag that will dictate how the output is formatted,
23
- // defaults to toDateString(); using switch/case here in case more values wanted to be added
24
- const dateObj = new Date(item.date)
25
- if (item.dateFormat) {
26
- switch (item.dateFormat.toLowerCase()) {
27
- case 'iso':
28
- return dateObj.toISOString()
29
- }
30
- }
31
- return dateObj.toDateString()
32
- })
33
- </script>
34
-
35
- <style scoped>
36
- .beam_day-divider {
37
- text-align: left;
38
- padding: 1rem;
39
- background: var(--sc-cell-changed-color);
40
- border-bottom: 1px solid var(--sc-row-border-color);
41
- box-sizing: border-box;
42
- margin-bottom: 1rem;
43
-
44
- /* reverse margins only for day-divider elements in list */
45
- margin-left: calc(-1 * var(--sc-list-margin));
46
- margin-right: calc(-1 * var(--sc-list-margin));
47
-
48
- & h2 {
49
- text-align: left;
50
- font-size: 1rem;
51
- color: var(--sc-primary-text-color);
52
- margin: 0;
53
- padding: 0;
54
- }
55
- }
56
-
57
- .beam_day-divider:first-of-type {
58
- margin-top: 0;
59
- }
60
- </style>
@@ -1,58 +0,0 @@
1
- <template>
2
- <div class="beam_filters">
3
- <div class="beam_filters-heading" @click="isFilterExpanded = !isFilterExpanded">
4
- <ToggleArrow :open="isFilterExpanded" />
5
- <BeamHeading>Filter</BeamHeading>
6
- </div>
7
-
8
- <div v-show="isFilterExpanded" class="beam_filters-options">
9
- <slot />
10
- </div>
11
- </div>
12
- </template>
13
-
14
- <script setup lang="ts">
15
- import { ref } from 'vue'
16
-
17
- defineSlots<{ default(): any }>()
18
-
19
- const isFilterExpanded = ref(false)
20
- </script>
21
-
22
- <style scoped>
23
- .beam_filters {
24
- background-color: var(--sc-primary-color);
25
- border-bottom: 1px solid var(--sc-row-border-color);
26
- box-sizing: border-box;
27
- min-height: 2em;
28
- overflow: visible;
29
- padding: 0.625rem;
30
- transition: all 0.2s ease-in-out;
31
- }
32
-
33
- .beam_filters-heading {
34
- align-items: center;
35
- background-color: var(--sc-primary-color);
36
- box-sizing: border-box;
37
- cursor: pointer;
38
- display: flex;
39
- font-size: 1rem;
40
-
41
- & > h1 {
42
- font-size: 1rem;
43
- }
44
- }
45
-
46
- .beam_filters-options {
47
- display: flex;
48
- flex-direction: row;
49
- justify-content: flex-start;
50
- margin: 1rem 0;
51
- padding: 0 1rem;
52
- gap: 1rem;
53
-
54
- @media (max-width: 479px) {
55
- flex-direction: column;
56
- }
57
- }
58
- </style>
@@ -1,150 +0,0 @@
1
- <template>
2
- <div v-on-click-outside="() => (isMenuOpen = false)" class="beam_filter-container">
3
- <BeamHeading class="beam_filter-option-heading">{{ title }}</BeamHeading>
4
- <div class="beam_filter-option" @click="isMenuOpen = !isMenuOpen">
5
- <div class="beam_filter-option-select">
6
- <div class="beam_filter-arrow">
7
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 35.36 70.71">
8
- <polygon points="0 70.71 0 0 35.36 35.36 0 70.71" />
9
- </svg>
10
- </div>
11
- <div class="beam_filter-label">
12
- <label>{{ label }}</label>
13
- </div>
14
- </div>
15
-
16
- <ul v-if="isMenuOpen" ref="menu" class="beam_filter-select-menu">
17
- <li
18
- v-for="choice in choices"
19
- :key="choice.value"
20
- :class="{ selected: label == choice.label }"
21
- :data-value="choice.value"
22
- class="beam_filter-select-option"
23
- @click="selectChoice(choice)">
24
- {{ choice.label }}
25
- </li>
26
- </ul>
27
- </div>
28
- </div>
29
- </template>
30
-
31
- <script setup lang="ts">
32
- import { vOnClickOutside } from '@vueuse/components'
33
- import { ref } from 'vue'
34
-
35
- import { BeamFilterChoice } from '../types'
36
-
37
- const emit = defineEmits<{ select: [choice: BeamFilterChoice] }>()
38
-
39
- const { choices, title = 'title' } = defineProps<{
40
- choices: BeamFilterChoice[]
41
- title?: string
42
- }>()
43
-
44
- const isMenuOpen = ref(false)
45
- const label = ref(choices[0].label)
46
- const value = ref(choices[0].value)
47
-
48
- const selectChoice = (data: BeamFilterChoice) => {
49
- label.value = data.label
50
- value.value = data.value
51
- emit('select', data)
52
- }
53
- </script>
54
-
55
- <style scoped>
56
- .beam_filter-option {
57
- cursor: pointer;
58
- position: relative;
59
- }
60
-
61
- .beam_filter-option-heading {
62
- font-size: 1rem !important;
63
- padding-bottom: 0.25rem;
64
- }
65
-
66
- .beam_filter-option-select {
67
- align-items: stretch;
68
- appearance: none;
69
- background-color: white;
70
- border: 1px solid var(--sc-row-border-color);
71
- color: var(--sc-primary-text-color);
72
- display: flex;
73
- font-family: var(--sc-font-family);
74
- font-size: 0.8rem;
75
- font-weight: bold;
76
- position: relative;
77
- }
78
-
79
- label {
80
- cursor: pointer;
81
- padding: 0.5rem;
82
- }
83
-
84
- .beam_filter-arrow {
85
- background: var(--sc-primary-color);
86
- color: var(--sc-primary-text-color);
87
- cursor: pointer;
88
- display: flex;
89
- align-items: center;
90
- width: 5px;
91
- padding: 0.5rem 0.7rem;
92
- }
93
-
94
- .beam_filter-label {
95
- display: flex;
96
- align-items: center;
97
- }
98
-
99
- svg {
100
- fill: var(--sc-primary-text-color);
101
- width: 5px;
102
- transform: rotate(90deg);
103
- }
104
-
105
- .beam_filter-select-menu {
106
- background-color: white;
107
- border-top: none;
108
- border: 1px solid var(--sc-row-border-color);
109
- box-sizing: border-box;
110
- left: 0;
111
- list-style: none;
112
- margin: 0;
113
- max-height: 200px;
114
- overflow-y: scroll;
115
- padding: 0rem;
116
- position: absolute;
117
- width: 100%;
118
- z-index: 100;
119
- }
120
-
121
- .beam_filter-select-option {
122
- font-size: 0.8rem;
123
- font-family: var(--sc-font-family);
124
- font-weight: bold;
125
- color: var(--sc-primary-text-color);
126
- border-bottom: 1px solid var(--sc-row-border-color);
127
- padding: 0.5rem;
128
- &:hover {
129
- background: var(--sc-primary-color);
130
- }
131
- }
132
-
133
- .selected {
134
- background: var(--sc-row-border-color);
135
-
136
- &:hover {
137
- background: var(--sc-row-border-color);
138
- }
139
- }
140
- .beam_filter-container {
141
- flex-grow: 1;
142
- max-width: 300px;
143
- width: 50%;
144
-
145
- @media (max-width: 479px) {
146
- width: 100%;
147
- max-width: 100%;
148
- }
149
- }
150
- </style>
@@ -1,17 +0,0 @@
1
- <template>
2
- <h1 class="beam_header">
3
- <slot></slot>
4
- </h1>
5
- </template>
6
-
7
- <style scoped>
8
- .beam_header {
9
- border: 1px solid transparent;
10
- text-align: left;
11
- font-size: 1.125rem;
12
- color: var(--sc-primary-text-color);
13
- margin: 0;
14
- padding: 0;
15
- font-family: var(--sc-font-family);
16
- }
17
- </style>
@@ -1,118 +0,0 @@
1
- <template>
2
- <div class="beam_metadata">
3
- <div class="beam_metadata_content">
4
- <slot>
5
- <div class="beam_metadata_header beam_metadata--two-column"></div>
6
- <div class="beam_metadata_block">
7
- <p class="beam_metadata_heading">
8
- Status:
9
- <span :class="{ alert: !order.complete }" class="beam_metadata--normal">{{
10
- order.complete ? 'Complete' : 'In Progress'
11
- }}</span>
12
- </p>
13
- </div>
14
- <div class="beam_metadata_shipping beam_metadata_block">
15
- <div class="beam_metadata_source">
16
- <p class="beam_metadata_heading">Source</p>
17
- </div>
18
-
19
- <div class="beam_metadata_source">
20
- <p class="beam_metadata_heading">Receiving</p>
21
- </div>
22
- </div>
23
- </slot>
24
- </div>
25
- <hr />
26
- </div>
27
- </template>
28
-
29
- <script setup lang="ts">
30
- defineProps<{
31
- order: {
32
- orderNumber: string
33
- product: string
34
- quantity: number
35
- total: number
36
- complete: boolean
37
- }
38
- }>()
39
- </script>
40
-
41
- <style scoped>
42
- .beam_metadata {
43
- /* margin:3.125rem; */
44
- box-sizing: border-box;
45
- display: flex;
46
- flex-direction: column;
47
- max-height: 100vh;
48
- color: var(--sc-primary-text-color);
49
- font-family: var(--sc-font-family);
50
- }
51
- .beam_metadata_content {
52
- padding-top: 10px;
53
- }
54
- .beam_metadata_header {
55
- display: flex;
56
- flex-direction: row;
57
- align-items: baseline;
58
- padding: 0px 30px 0px 30px;
59
- justify-content: space-between;
60
- }
61
- .beam_metadata_count {
62
- font-size: 1.5rem;
63
-
64
- & p {
65
- margin: 0;
66
- }
67
- }
68
- .beam_metadata_header-order-num {
69
- font-weight: bold;
70
- font-size: 1.5rem;
71
- }
72
- .beam_metadata_block {
73
- padding: 0px 30px;
74
- margin: 10px 0;
75
- }
76
-
77
- .beam_metadata_shipping {
78
- display: flex;
79
- flex-direction: row;
80
- align-items: baseline;
81
- justify-content: space-between;
82
-
83
- & p {
84
- line-height: 1.5rem;
85
- }
86
- }
87
- @media screen and (max-width: 600px) {
88
- .beam_metadata_shipping {
89
- flex-direction: column;
90
- }
91
- }
92
-
93
- .beam_metadata_component_header {
94
- display: flex;
95
- flex-direction: row;
96
- justify-content: space-between;
97
- align-items: baseline;
98
- }
99
- .beam_metadata_components {
100
- overflow: scroll;
101
- }
102
- hr {
103
- display: block;
104
- height: 1px;
105
- border: 0;
106
- border-top: 1px solid var(--sc-row-border-color);
107
- margin: 1em 0;
108
- padding: 0;
109
- }
110
- </style>
111
- <style>
112
- .beam_metadata_heading {
113
- font-size: 1.125rem;
114
- font-weight: bold;
115
- margin: 0.625rem 0;
116
- color: var(--sc-primary-text-color);
117
- }
118
- </style>
@@ -1,28 +0,0 @@
1
- <template>
2
- <portal to="beam_modal_outlet">
3
- <div v-show="showModal" class="beam_modal">
4
- <BeamBtn @click="$emit('closemodal')">Close Modal</BeamBtn>
5
- <slot @closemodal="$emit('closemodal')" @confirmmodal="$emit('confirmmodal')"></slot>
6
- </div>
7
- </portal>
8
- </template>
9
-
10
- <script setup lang="ts">
11
- defineEmits<{ closemodal: []; confirmmodal: [] }>()
12
- defineProps<{ showModal: boolean }>()
13
- </script>
14
-
15
- <style scoped>
16
- .beam_modal {
17
- position: fixed;
18
- top: 0;
19
- right: 0;
20
- bottom: 0;
21
- left: 0;
22
- background-color: rgba(0, 0, 0, 0.5);
23
- backdrop-filter: blur(2px);
24
- z-index: 200;
25
- text-align: center;
26
- padding: 1.25rem;
27
- }
28
- </style>
@@ -1,18 +0,0 @@
1
- <template>
2
- <portal-target name="beam_modal_outlet" />
3
- </template>
4
-
5
- <script setup lang="ts">
6
- /* const emit = */ defineEmits<{
7
- confirmmodal: []
8
- closemodal: []
9
- }>()
10
-
11
- // const confirmModal = () => {
12
- // emit('confirmmodal')
13
- // }
14
-
15
- // const closeModal = () => {
16
- // emit('closemodal')
17
- // }
18
- </script>
@@ -1,23 +0,0 @@
1
- <template>
2
- <p class="beam_metadata_heading">
3
- {{ label }}: <span :class="{ 'beam--alert': !complete }" class="beam--normal">{{ statusMessage }}</span>
4
- </p>
5
- </template>
6
-
7
- <script setup lang="ts">
8
- import { computed } from 'vue'
9
-
10
- const {
11
- label = 'Status',
12
- progressMessage = 'In Progress',
13
- completeMessage = 'Complete',
14
- complete = false,
15
- } = defineProps<{
16
- label?: string
17
- progressMessage?: string
18
- completeMessage?: string
19
- complete?: boolean
20
- }>()
21
-
22
- const statusMessage = computed(() => (complete ? completeMessage : progressMessage))
23
- </script>
@@ -1,29 +0,0 @@
1
- <template>
2
- <div class="beam_modal-confirm">
3
- <h2>Would you like to continue?</h2>
4
- <BeamBtn @click="$emit('confirmmodal')">Yes</BeamBtn>
5
- <BeamBtn @click="$emit('confirmmodal')">No</BeamBtn>
6
- </div>
7
- </template>
8
-
9
- <style scoped>
10
- .beam_modal-confirm {
11
- background: #ffffff;
12
- padding: 1.25rem;
13
- width: 80%;
14
- max-width: 400px;
15
- position: absolute;
16
- top: 50%;
17
- left: 50%;
18
- transform: translate(-50%, -50%);
19
-
20
- & button {
21
- margin: 0.625rem;
22
- }
23
- & h2 {
24
- border-bottom: 1px solid var(--sc-row-border-color);
25
- padding-bottom: 0.625rem;
26
- color: var(--sc-primary-text-color);
27
- }
28
- }
29
- </style>
@@ -1,13 +0,0 @@
1
- <template>
2
- <div class="fixed-top">
3
- <slot></slot>
4
- </div>
5
- </template>
6
-
7
- <style scoped>
8
- .fixed-top {
9
- position: sticky;
10
- top: 0;
11
- left: 0;
12
- }
13
- </style>
@@ -1,76 +0,0 @@
1
- <template>
2
- <label class="container">
3
- <input v-model="value" type="checkbox" tabindex="-1" />
4
- <div class="checkmark" tabindex="0"></div>
5
- </label>
6
- </template>
7
-
8
- <script setup lang="ts">
9
- const value = defineModel<boolean>({ default: false })
10
- </script>
11
-
12
- <style scoped>
13
- .container {
14
- display: block;
15
- position: relative;
16
- padding-left: 2.5ch;
17
- margin: 0;
18
- margin-top: 0.5rem;
19
- cursor: pointer;
20
- font-size: 2rem;
21
- -webkit-user-select: none;
22
- -moz-user-select: none;
23
- -ms-user-select: none;
24
- user-select: none;
25
- }
26
-
27
- /* hide default checkbox */
28
- .container input {
29
- position: absolute;
30
- opacity: 0;
31
- cursor: pointer;
32
- height: 0;
33
- width: 0;
34
- }
35
-
36
- .checkmark {
37
- position: absolute;
38
- top: 0;
39
- left: 0;
40
- height: 2rem;
41
- width: 2rem;
42
- background-color: #eee;
43
- outline: 2px solid transparent;
44
- border: 1px solid var(--sc-highlight);
45
- }
46
-
47
- .container:hover input ~ .checkmark {
48
- background-color: white;
49
- }
50
-
51
- .container input:checked ~ .checkmark {
52
- background-color: var(--sc-brand-secondary);
53
- }
54
-
55
- .checkmark:after {
56
- content: '';
57
- position: absolute;
58
- display: none;
59
- }
60
-
61
- .container input:checked ~ .checkmark:after {
62
- display: block;
63
- }
64
-
65
- .container .checkmark:after {
66
- left: 25%;
67
- top: 50%;
68
- width: 0.5rem;
69
- height: 1rem;
70
- border: solid var(--sc-text-color);
71
- border-width: 0 3px 3px 0;
72
- -webkit-transform: rotate(45deg);
73
- -ms-transform: rotate(45deg);
74
- transform: rotate(45deg) translate(-50%, -50%);
75
- }
76
- </style>
@@ -1,55 +0,0 @@
1
- <template>
2
- <div class="beam_item-count">
3
- <span
4
- :contenteditable="editable"
5
- :class="{ 'beam--alert': !isCountComplete }"
6
- @click.stop.prevent="validate"
7
- @input.stop.prevent="debouncedValidate"
8
- @paste="validate">
9
- {{ count }}
10
- </span>
11
- <span v-if="denominator">/{{ denominator }}</span>
12
- <span v-if="uom">&nbsp; {{ uom }}</span>
13
- </div>
14
- </template>
15
-
16
- <script setup lang="ts">
17
- import { useDebounceFn } from '@vueuse/core'
18
- import { computed, type HTMLAttributes } from 'vue'
19
-
20
- const count = defineModel<number>({ required: true })
21
- const {
22
- denominator = 0,
23
- debounce = 300,
24
- editable = true,
25
- uom = '',
26
- } = defineProps<{
27
- denominator?: number
28
- debounce?: number
29
- editable?: HTMLAttributes['contenteditable']
30
- uom?: string
31
- }>()
32
-
33
- const isCountComplete = computed(() => denominator !== 0 && count.value === denominator)
34
-
35
- const validate = (payload: ClipboardEvent | InputEvent | MouseEvent) => {
36
- const newValue = Number((payload.target as HTMLElement).innerHTML) || 0
37
- count.value = denominator ? Math.min(newValue, denominator) : newValue
38
- }
39
-
40
- const debouncedRequest = useDebounceFn((payload: InputEvent) => validate(payload), debounce)
41
- const debouncedValidate = async (payload: InputEvent) => await debouncedRequest(payload)
42
- </script>
43
-
44
- <style scoped>
45
- .beam_item-count {
46
- font-size: 1.3125rem;
47
- color: var(--sc-primary-text-color);
48
- }
49
-
50
- .beam_item-count span {
51
- margin: 0;
52
- padding: 0;
53
- outline: none;
54
- }
55
- </style>
@@ -1,17 +0,0 @@
1
- <template>
2
- <a :href="to" class="beam_list-anchor">
3
- <slot />
4
- </a>
5
- </template>
6
-
7
- <script setup lang="ts">
8
- const { to = '' } = defineProps<{ to?: string }>()
9
- </script>
10
-
11
- <style scoped>
12
- .beam_list-anchor {
13
- text-decoration: none;
14
- outline: none;
15
- color: var(--sc-primary-text-color);
16
- }
17
- </style>