…lines 1–10 unchanged (10 lines)
11 t-att-checked="value.id === props.selected.id"
12 t-on-change="() => props.setSelected(value)"
13 t-att-name="value.attribute_id.id"
14 t-attf-id="{{ value.attribute_id.id }}_{{ value.id }}"
15 class="form-check-input radio-check"
16 />
17 <label t-attf-for="{{ value.attribute_id.id }}_{{ value.id }}">
18 <span t-att-class="{ 'text-muted': pos.doHaveConflictWith(value, props.allSelectedValues) }" t-esc="value.name"/>
19 <div t-if="value.price_extra" class="price-extra-cell d-inline-block ms-2">
20 <span class="price_extra px-2 py-1 rounded-pill text-bg-info">
21 <t t-esc="getFormatPriceExtra(value.price_extra)"/>
22 </span>
23 </div>
…lines 24–41 unchanged (18 lines)
42 t-on-change="() => props.setSelected(value)"
43 t-att-name="value.attribute_id.id"
44 t-attf-id="{{ value.attribute_id.id }}_{{ value.id }}"
45 class="form-check-input d-none"
46 />
47 <label
48 t-attf-class="btn btn-secondary btn-lg lh-lg d-flex {{ value.id == props.selected.id ? 'active' : '' }}"
49 t-att-name="value.name"
50 t-attf-for="{{ value.attribute_id.id }}_{{ value.id }}">
51 <span t-att-class="{ 'text-muted': pos.doHaveConflictWith(value, props.allSelectedValues) }" t-esc="value.name"/>
52 <div t-if="value.price_extra" class="price-extra-cell d-inline-block ms-2">
53 <span class="price_extra px-2 py-1 rounded-pill text-bg-info">
54 <t t-esc="getFormatPriceExtra(value.price_extra)"/>
…lines 55–90 unchanged (36 lines)
91 <ul class="color_attribute_list d-flex gap-3 p-0">
92 <li t-foreach="props.attribute.values()" t-as="value" t-key="value.id" class="color_attribute_list_item">
93 <t t-set="is_custom" t-value="is_custom || (value.is_custom and value.id == props.selected.id)"/>
94 <t t-set="img_style" t-value="value.image ? 'background:url(/web/image/product.template.attribute.value/' + value.id + '/image); background-size:cover;' : ''"/>
95 <t t-set="color_style" t-value="value.is_custom ? '' : 'background-color: ' + value.html_color" />
96 <span class="d-flex flex-row justify-content-center align-items-center">
97 <label t-attf-class="configurator_color rounded-circle border position-relative {{ value.id == props.selected.id ? 'active border-3' : 'border-3 border-secondary' }}"
98 t-att-class="{'ptav-not-available' : value.excluded}"
99 t-attf-style="{{ img_style or color_style }}" t-att-data-color="value.name" t-att-title="value.name">
100 <input
101 type="radio"
102 t-att-checked="value.id === props.selected.id"
103 t-on-change="() => props.setSelected(value)"
…lines 104–126 unchanged (23 lines)
127 type="checkbox"
128 t-attf-id="multi-{{value.id}}"
129 t-attf-name="multi-{{value.id}}"
130 t-on-change="() => this.onChange(value)"
131 />
132 <label
133 t-attf-class="form-check-label btn btn-secondary btn-lg lh-lg d-flex {{ this.state.is_value_selected[value.id] === true ? 'active' : '' }}"
134 t-attf-name="multi-{{value.id}}"
135 t-attf-for="multi-{{value.id}}">
136 <span t-att-class="{ 'text-muted': pos.doHaveConflictWith(value, props.allSelectedValues) }" t-esc="value.name"/>
137 <div t-if="value.price_extra" class="price-extra-cell d-inline-block ms-2">
138 <span class="price_extra px-2 py-1 rounded-pill text-bg-info">
139 <t t-esc="getFormatPriceExtra(value.price_extra)"/>
…lines 140–151 unchanged (12 lines)
152 <li t-foreach="props.attribute.values()" t-as="value" t-key="value.id" class="color_attribute_list_item">
153 <t t-set="is_custom" t-value="is_custom || (value.is_custom and value.id == props.selected.id)"/>
154 <t t-set="img_style" t-value="value.image ? 'background:url(/web/image/product.template.attribute.value/' + value.id + '/image); background-size:cover;' : ''"/>
155 <t t-set="color_style" t-value="value.is_custom ? '' : 'background-color: ' + value.html_color" />
156 <span class="d-flex flex-column justify-content-center align-items-center">
157 <label
158 t-attf-class="configurator_color rounded-3 border position-relative {{ value.id == props.selected.id ? 'active border-3' : 'border-3 border-secondary' }}"
159 t-att-class="{'ptav-not-available' : value.excluded}"
160 t-attf-style="height: 62px; aspect-ratio: 1; {{ img_style or color_style }}"
161 t-att-data-color="value.name">
162 <input
163 type="radio"
164 t-att-checked="value.id === props.selected.id"
…lines 165–240 unchanged (76 lines)