@simplysm/angular 14.0.102 → 14.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"sd-checkbox.d.ts","sourceRoot":"","sources":["../../../src/controls/checkbox/sd-checkbox.ts"],"names":[],"mappings":";AAaA,qBAmPa,UAAU;IACrB,KAAK,+CAAgB;IACrB,WAAW,6CAAgB,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAAc;IAE/E,IAAI,8CAAsB;IAC1B,KAAK,qEAAiD;IACtD,QAAQ,qEAAiD;IAEzD,IAAI,+DAAwB;IAC5B,MAAM,qEAAiD;IACvD,KAAK,qEAAiD;IACtD,KAAK,wJAUD;IAEJ,YAAY,0DAAmB;;IAO/B,OAAO,CAAC,KAAK,EAAE,KAAK;IAYpB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;yCA1C1B,UAAU;2CAAV,UAAU;CAsDtB"}
1
+ {"version":3,"file":"sd-checkbox.d.ts","sourceRoot":"","sources":["../../../src/controls/checkbox/sd-checkbox.ts"],"names":[],"mappings":";AAaA,qBAoPa,UAAU;IACrB,KAAK,+CAAgB;IACrB,WAAW,6CAAgB,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAAc;IAE/E,IAAI,8CAAsB;IAC1B,KAAK,qEAAiD;IACtD,QAAQ,qEAAiD;IAEzD,IAAI,+DAAwB;IAC5B,MAAM,qEAAiD;IACvD,KAAK,qEAAiD;IACtD,KAAK,wJAUD;IAEJ,YAAY,0DAAmB;;IAO/B,OAAO,CAAC,KAAK,EAAE,KAAK;IAYpB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;yCA1C1B,UAAU;2CAAV,UAAU;CAsDtB"}
@@ -73,7 +73,7 @@ export class SdCheckbox {
73
73
  i0.ɵɵconditional(!ctx.radio() ? 2 : 3);
74
74
  i0.ɵɵadvance(2);
75
75
  i0.ɵɵstyleMap(ctx.contentStyle());
76
- } }, dependencies: [NgIcon], styles: ["/*@function to-rgb($oklch-color) {\n @return color.to-space($oklch-color, rgb);\n}*/\n/*$colors: (\n red: to-rgb(oklch(0.704 0.191 22.216)),\n orange: to-rgb(oklch(0.75 0.183 55.934)),\n amber: to-rgb(oklch(0.828 0.189 84.429)),\n yellow: to-rgb(oklch(0.852 0.199 91.936)),\n lime: to-rgb(oklch(0.841 0.238 128.85)),\n green: to-rgb(oklch(0.792 0.209 151.711)),\n emerald: to-rgb(oklch(0.765 0.177 163.223)),\n teal: to-rgb(oklch(0.777 0.152 181.912)),\n cyan: to-rgb(oklch(0.789 0.154 211.53)),\n sky: to-rgb(oklch(0.746 0.16 232.661)),\n blue: to-rgb(oklch(0.707 0.165 254.624)),\n indigo: to-rgb(oklch(0.673 0.182 276.935)),\n violet: to-rgb(oklch(0.702 0.183 293.541)),\n purple: to-rgb(oklch(0.714 0.203 305.504)),\n fuchsia: to-rgb(oklch(0.74 0.238 322.16)),\n pink: to-rgb(oklch(0.718 0.202 349.761)),\n rose: to-rgb(oklch(0.712 0.194 13.428)),\n slate: to-rgb(oklch(0.704 0.04 256.788)),\n gray: to-rgb(oklch(0.707 0.022 261.325)),\n zinc: to-rgb(oklch(0.705 0.015 286.067)),\n neutral: to-rgb(oklch(0.708 0 0)),\n stone: to-rgb(oklch(0.709 0.01 56.259)),\n);*/\nsd-checkbox {\n display: block;\n padding: var(--gap-sm) var(--gap-default);\n border: 1px solid transparent;\n font-size: var(--font-size-default);\n font-family: var(--font-family);\n font-variant-numeric: tabular-nums;\n line-height: var(--line-height);\n color: var(--text-trans-default);\n color: inherit;\n cursor: pointer;\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-sm) * 2 + 2px);\n gap: var(--gap-sm);\n}\n@supports not (appearance: auto) {\n sd-checkbox {\n gap: 0;\n }\n sd-checkbox > * + * {\n margin-left: var(--gap-sm);\n }\n}\nsd-checkbox > ._indicator_rect {\n display: inline-block;\n vertical-align: -0.125em;\n user-select: none;\n width: calc(var(--font-size-default) + 2px);\n height: calc(var(--font-size-default) + 2px);\n border: 1px solid var(--border-color-light);\n background: var(--theme-secondary-lightest);\n}\nsd-checkbox > ._indicator_rect > ._indicator {\n margin: -1px -2px;\n text-align: center;\n opacity: 0;\n color: var(--text-trans-rev-default);\n}\nsd-checkbox > ._indicator_rect > ._indicator > ng-icon > svg {\n vertical-align: top;\n stroke-width: 2.5px !important;\n}\nsd-checkbox ._contents {\n display: inline-block;\n vertical-align: top;\n padding-left: var(--gap-sm);\n}\nsd-checkbox > ._indicator_rect + ._contents:empty {\n display: none;\n}\nsd-checkbox:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-checked=true] > ._indicator_rect {\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-checked=true] > ._indicator_rect > ._indicator {\n opacity: 1;\n}\nsd-checkbox[data-sd-theme=gray] > ._indicator_rect {\n background: var(--theme-gray-lightest);\n}\nsd-checkbox[data-sd-theme=gray] > ._indicator_rect > ._indicator {\n color: var(--theme-gray-default);\n}\nsd-checkbox[data-sd-theme=gray][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-gray-default);\n background: var(--theme-gray-default);\n}\nsd-checkbox[data-sd-theme=gray][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=gray]:focus > ._indicator_rect {\n border-color: var(--theme-gray-dark);\n}\nsd-checkbox[data-sd-theme=blue-gray] > ._indicator_rect {\n background: var(--theme-blue-gray-lightest);\n}\nsd-checkbox[data-sd-theme=blue-gray] > ._indicator_rect > ._indicator {\n color: var(--theme-blue-gray-default);\n}\nsd-checkbox[data-sd-theme=blue-gray][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-blue-gray-default);\n background: var(--theme-blue-gray-default);\n}\nsd-checkbox[data-sd-theme=blue-gray][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=blue-gray]:focus > ._indicator_rect {\n border-color: var(--theme-blue-gray-dark);\n}\nsd-checkbox[data-sd-theme=primary] > ._indicator_rect {\n background: var(--theme-primary-lightest);\n}\nsd-checkbox[data-sd-theme=primary] > ._indicator_rect > ._indicator {\n color: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=primary][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=primary][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=primary]:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-theme=secondary] > ._indicator_rect {\n background: var(--theme-secondary-lightest);\n}\nsd-checkbox[data-sd-theme=secondary] > ._indicator_rect > ._indicator {\n color: var(--theme-secondary-default);\n}\nsd-checkbox[data-sd-theme=secondary][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-secondary-default);\n background: var(--theme-secondary-default);\n}\nsd-checkbox[data-sd-theme=secondary][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=secondary]:focus > ._indicator_rect {\n border-color: var(--theme-secondary-dark);\n}\nsd-checkbox[data-sd-theme=info] > ._indicator_rect {\n background: var(--theme-info-lightest);\n}\nsd-checkbox[data-sd-theme=info] > ._indicator_rect > ._indicator {\n color: var(--theme-info-default);\n}\nsd-checkbox[data-sd-theme=info][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-info-default);\n background: var(--theme-info-default);\n}\nsd-checkbox[data-sd-theme=info][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=info]:focus > ._indicator_rect {\n border-color: var(--theme-info-dark);\n}\nsd-checkbox[data-sd-theme=success] > ._indicator_rect {\n background: var(--theme-success-lightest);\n}\nsd-checkbox[data-sd-theme=success] > ._indicator_rect > ._indicator {\n color: var(--theme-success-default);\n}\nsd-checkbox[data-sd-theme=success][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-success-default);\n background: var(--theme-success-default);\n}\nsd-checkbox[data-sd-theme=success][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=success]:focus > ._indicator_rect {\n border-color: var(--theme-success-dark);\n}\nsd-checkbox[data-sd-theme=warning] > ._indicator_rect {\n background: var(--theme-warning-lightest);\n}\nsd-checkbox[data-sd-theme=warning] > ._indicator_rect > ._indicator {\n color: var(--theme-warning-default);\n}\nsd-checkbox[data-sd-theme=warning][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-warning-default);\n background: var(--theme-warning-default);\n}\nsd-checkbox[data-sd-theme=warning][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=warning]:focus > ._indicator_rect {\n border-color: var(--theme-warning-dark);\n}\nsd-checkbox[data-sd-theme=danger] > ._indicator_rect {\n background: var(--theme-danger-lightest);\n}\nsd-checkbox[data-sd-theme=danger] > ._indicator_rect > ._indicator {\n color: var(--theme-danger-default);\n}\nsd-checkbox[data-sd-theme=danger][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-danger-default);\n background: var(--theme-danger-default);\n}\nsd-checkbox[data-sd-theme=danger][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=danger]:focus > ._indicator_rect {\n border-color: var(--theme-danger-dark);\n}\nsd-checkbox[data-sd-theme=white] > ._indicator_rect {\n background: var(--control-color);\n border-color: var(--text-trans-lightest);\n}\nsd-checkbox[data-sd-theme=white][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=white]:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-radio=true] > ._indicator_rect {\n border-radius: 100%;\n padding: var(--gap-xs);\n}\nsd-checkbox[data-sd-radio=true] > ._indicator_rect > ._indicator {\n border-radius: 100%;\n width: 100%;\n height: 100%;\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-radio=true][data-sd-checked=true] > ._indicator_rect {\n background: var(--theme-secondary-lightest);\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-size=sm] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-xs) * 2 + 2px);\n padding: var(--gap-xs) var(--gap-sm);\n gap: var(--gap-xs);\n}\n@supports not (appearance: auto) {\n sd-checkbox[data-sd-size=sm] {\n gap: 0;\n }\n sd-checkbox[data-sd-size=sm] > * + * {\n margin-left: var(--gap-xs);\n }\n}\nsd-checkbox[data-sd-size=lg] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-default) * 2 + 2px);\n padding: var(--gap-default) var(--gap-lg);\n gap: var(--gap-default);\n}\n@supports not (appearance: auto) {\n sd-checkbox[data-sd-size=lg] {\n gap: 0;\n }\n sd-checkbox[data-sd-size=lg] > * + * {\n margin-left: var(--gap-default);\n }\n}\nsd-checkbox[data-sd-inset=true] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-sm) * 2);\n border: none;\n justify-content: center;\n text-align: center;\n}\nsd-checkbox[data-sd-inset=true][data-sd-size=sm] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-xs) * 2);\n}\nsd-checkbox[data-sd-inset=true][data-sd-size=lg] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-default) * 2);\n}\nsd-checkbox[data-sd-inline=true] {\n display: inline-block;\n vertical-align: top;\n padding: 0;\n border: none;\n height: calc(var(--font-size-default) * var(--line-height-strip-unit));\n width: auto;\n}\nsd-checkbox[data-sd-disabled=true] {\n opacity: 0.3;\n pointer-events: none;\n}"], encapsulation: 2, changeDetection: 0 });
76
+ } }, dependencies: [NgIcon], styles: ["/*@function to-rgb($oklch-color) {\n @return color.to-space($oklch-color, rgb);\n}*/\n/*$colors: (\n red: to-rgb(oklch(0.704 0.191 22.216)),\n orange: to-rgb(oklch(0.75 0.183 55.934)),\n amber: to-rgb(oklch(0.828 0.189 84.429)),\n yellow: to-rgb(oklch(0.852 0.199 91.936)),\n lime: to-rgb(oklch(0.841 0.238 128.85)),\n green: to-rgb(oklch(0.792 0.209 151.711)),\n emerald: to-rgb(oklch(0.765 0.177 163.223)),\n teal: to-rgb(oklch(0.777 0.152 181.912)),\n cyan: to-rgb(oklch(0.789 0.154 211.53)),\n sky: to-rgb(oklch(0.746 0.16 232.661)),\n blue: to-rgb(oklch(0.707 0.165 254.624)),\n indigo: to-rgb(oklch(0.673 0.182 276.935)),\n violet: to-rgb(oklch(0.702 0.183 293.541)),\n purple: to-rgb(oklch(0.714 0.203 305.504)),\n fuchsia: to-rgb(oklch(0.74 0.238 322.16)),\n pink: to-rgb(oklch(0.718 0.202 349.761)),\n rose: to-rgb(oklch(0.712 0.194 13.428)),\n slate: to-rgb(oklch(0.704 0.04 256.788)),\n gray: to-rgb(oklch(0.707 0.022 261.325)),\n zinc: to-rgb(oklch(0.705 0.015 286.067)),\n neutral: to-rgb(oklch(0.708 0 0)),\n stone: to-rgb(oklch(0.709 0.01 56.259)),\n);*/\nsd-checkbox {\n display: block;\n padding: var(--gap-sm) var(--gap-default);\n border: 1px solid transparent;\n font-size: var(--font-size-default);\n font-family: var(--font-family);\n font-variant-numeric: tabular-nums;\n line-height: var(--line-height);\n color: var(--text-trans-default);\n color: inherit;\n cursor: pointer;\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-sm) * 2 + 2px);\n gap: var(--gap-sm);\n}\n@supports not (appearance: auto) {\n sd-checkbox {\n gap: 0;\n }\n sd-checkbox > * + * {\n margin-left: var(--gap-sm);\n }\n}\nsd-checkbox > ._indicator_rect {\n display: inline-block;\n vertical-align: -0.125em;\n user-select: none;\n width: calc(var(--font-size-default) + 2px);\n height: calc(var(--font-size-default) + 2px);\n border: 1px solid var(--border-color-light);\n background: var(--theme-secondary-lightest);\n}\nsd-checkbox > ._indicator_rect > ._indicator {\n margin: -1px -2px;\n text-align: center;\n opacity: 0;\n color: var(--text-trans-rev-default);\n}\nsd-checkbox > ._indicator_rect > ._indicator > ng-icon > svg {\n vertical-align: top;\n stroke-width: 2.5px !important;\n}\nsd-checkbox ._contents {\n display: inline-block;\n vertical-align: top;\n padding-left: var(--gap-sm);\n}\nsd-checkbox > ._indicator_rect + ._contents:empty {\n display: none;\n}\nsd-checkbox:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-checked=true] > ._indicator_rect > ._indicator {\n opacity: 1;\n}\nsd-checkbox[data-sd-theme=gray] > ._indicator_rect {\n background: var(--theme-gray-lightest);\n}\nsd-checkbox[data-sd-theme=gray] > ._indicator_rect > ._indicator {\n color: var(--theme-gray-default);\n}\nsd-checkbox[data-sd-theme=gray][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-gray-default);\n background: var(--theme-gray-default);\n}\nsd-checkbox[data-sd-theme=gray][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=gray]:focus > ._indicator_rect {\n border-color: var(--theme-gray-dark);\n}\nsd-checkbox[data-sd-theme=blue-gray] > ._indicator_rect {\n background: var(--theme-blue-gray-lightest);\n}\nsd-checkbox[data-sd-theme=blue-gray] > ._indicator_rect > ._indicator {\n color: var(--theme-blue-gray-default);\n}\nsd-checkbox[data-sd-theme=blue-gray][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-blue-gray-default);\n background: var(--theme-blue-gray-default);\n}\nsd-checkbox[data-sd-theme=blue-gray][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=blue-gray]:focus > ._indicator_rect {\n border-color: var(--theme-blue-gray-dark);\n}\nsd-checkbox[data-sd-theme=primary] > ._indicator_rect {\n background: var(--theme-primary-lightest);\n}\nsd-checkbox[data-sd-theme=primary] > ._indicator_rect > ._indicator {\n color: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=primary][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=primary][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=primary]:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-theme=secondary] > ._indicator_rect {\n background: var(--theme-secondary-lightest);\n}\nsd-checkbox[data-sd-theme=secondary] > ._indicator_rect > ._indicator {\n color: var(--theme-secondary-default);\n}\nsd-checkbox[data-sd-theme=secondary][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-secondary-default);\n background: var(--theme-secondary-default);\n}\nsd-checkbox[data-sd-theme=secondary][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=secondary]:focus > ._indicator_rect {\n border-color: var(--theme-secondary-dark);\n}\nsd-checkbox[data-sd-theme=info] > ._indicator_rect {\n background: var(--theme-info-lightest);\n}\nsd-checkbox[data-sd-theme=info] > ._indicator_rect > ._indicator {\n color: var(--theme-info-default);\n}\nsd-checkbox[data-sd-theme=info][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-info-default);\n background: var(--theme-info-default);\n}\nsd-checkbox[data-sd-theme=info][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=info]:focus > ._indicator_rect {\n border-color: var(--theme-info-dark);\n}\nsd-checkbox[data-sd-theme=success] > ._indicator_rect {\n background: var(--theme-success-lightest);\n}\nsd-checkbox[data-sd-theme=success] > ._indicator_rect > ._indicator {\n color: var(--theme-success-default);\n}\nsd-checkbox[data-sd-theme=success][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-success-default);\n background: var(--theme-success-default);\n}\nsd-checkbox[data-sd-theme=success][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=success]:focus > ._indicator_rect {\n border-color: var(--theme-success-dark);\n}\nsd-checkbox[data-sd-theme=warning] > ._indicator_rect {\n background: var(--theme-warning-lightest);\n}\nsd-checkbox[data-sd-theme=warning] > ._indicator_rect > ._indicator {\n color: var(--theme-warning-default);\n}\nsd-checkbox[data-sd-theme=warning][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-warning-default);\n background: var(--theme-warning-default);\n}\nsd-checkbox[data-sd-theme=warning][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=warning]:focus > ._indicator_rect {\n border-color: var(--theme-warning-dark);\n}\nsd-checkbox[data-sd-theme=danger] > ._indicator_rect {\n background: var(--theme-danger-lightest);\n}\nsd-checkbox[data-sd-theme=danger] > ._indicator_rect > ._indicator {\n color: var(--theme-danger-default);\n}\nsd-checkbox[data-sd-theme=danger][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-danger-default);\n background: var(--theme-danger-default);\n}\nsd-checkbox[data-sd-theme=danger][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=danger]:focus > ._indicator_rect {\n border-color: var(--theme-danger-dark);\n}\nsd-checkbox[data-sd-theme=white] > ._indicator_rect {\n background: var(--control-color);\n border-color: var(--text-trans-lightest);\n}\nsd-checkbox[data-sd-theme=white][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=white]:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-radio=true] > ._indicator_rect {\n border-radius: 100%;\n padding: var(--gap-xs);\n}\nsd-checkbox[data-sd-radio=true] > ._indicator_rect > ._indicator {\n border-radius: 100%;\n width: 100%;\n height: 100%;\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-radio=true][data-sd-checked=true] > ._indicator_rect {\n background: var(--theme-secondary-lightest);\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-size=sm] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-xs) * 2 + 2px);\n padding: var(--gap-xs) var(--gap-sm);\n gap: var(--gap-xs);\n}\n@supports not (appearance: auto) {\n sd-checkbox[data-sd-size=sm] {\n gap: 0;\n }\n sd-checkbox[data-sd-size=sm] > * + * {\n margin-left: var(--gap-xs);\n }\n}\nsd-checkbox[data-sd-size=lg] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-default) * 2 + 2px);\n padding: var(--gap-default) var(--gap-lg);\n gap: var(--gap-default);\n}\n@supports not (appearance: auto) {\n sd-checkbox[data-sd-size=lg] {\n gap: 0;\n }\n sd-checkbox[data-sd-size=lg] > * + * {\n margin-left: var(--gap-default);\n }\n}\nsd-checkbox[data-sd-inset=true] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-sm) * 2);\n border: none;\n justify-content: center;\n text-align: center;\n}\nsd-checkbox[data-sd-inset=true][data-sd-size=sm] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-xs) * 2);\n}\nsd-checkbox[data-sd-inset=true][data-sd-size=lg] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-default) * 2);\n}\nsd-checkbox[data-sd-inline=true] {\n display: inline-block;\n vertical-align: top;\n padding: 0;\n border: none;\n height: calc(var(--font-size-default) * var(--line-height-strip-unit));\n width: auto;\n}\nsd-checkbox[data-sd-disabled=true] {\n opacity: 0.3;\n pointer-events: none;\n}"], encapsulation: 2, changeDetection: 0 });
77
77
  }
78
78
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdCheckbox, [{
79
79
  type: Component,
@@ -101,6 +101,6 @@ export class SdCheckbox {
101
101
  "[attr.tabindex]": "'0'",
102
102
  "(click)": "onClick($event)",
103
103
  "(keydown)": "onKeydown($event)",
104
- }, styles: ["/*@function to-rgb($oklch-color) {\n @return color.to-space($oklch-color, rgb);\n}*/\n/*$colors: (\n red: to-rgb(oklch(0.704 0.191 22.216)),\n orange: to-rgb(oklch(0.75 0.183 55.934)),\n amber: to-rgb(oklch(0.828 0.189 84.429)),\n yellow: to-rgb(oklch(0.852 0.199 91.936)),\n lime: to-rgb(oklch(0.841 0.238 128.85)),\n green: to-rgb(oklch(0.792 0.209 151.711)),\n emerald: to-rgb(oklch(0.765 0.177 163.223)),\n teal: to-rgb(oklch(0.777 0.152 181.912)),\n cyan: to-rgb(oklch(0.789 0.154 211.53)),\n sky: to-rgb(oklch(0.746 0.16 232.661)),\n blue: to-rgb(oklch(0.707 0.165 254.624)),\n indigo: to-rgb(oklch(0.673 0.182 276.935)),\n violet: to-rgb(oklch(0.702 0.183 293.541)),\n purple: to-rgb(oklch(0.714 0.203 305.504)),\n fuchsia: to-rgb(oklch(0.74 0.238 322.16)),\n pink: to-rgb(oklch(0.718 0.202 349.761)),\n rose: to-rgb(oklch(0.712 0.194 13.428)),\n slate: to-rgb(oklch(0.704 0.04 256.788)),\n gray: to-rgb(oklch(0.707 0.022 261.325)),\n zinc: to-rgb(oklch(0.705 0.015 286.067)),\n neutral: to-rgb(oklch(0.708 0 0)),\n stone: to-rgb(oklch(0.709 0.01 56.259)),\n);*/\nsd-checkbox {\n display: block;\n padding: var(--gap-sm) var(--gap-default);\n border: 1px solid transparent;\n font-size: var(--font-size-default);\n font-family: var(--font-family);\n font-variant-numeric: tabular-nums;\n line-height: var(--line-height);\n color: var(--text-trans-default);\n color: inherit;\n cursor: pointer;\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-sm) * 2 + 2px);\n gap: var(--gap-sm);\n}\n@supports not (appearance: auto) {\n sd-checkbox {\n gap: 0;\n }\n sd-checkbox > * + * {\n margin-left: var(--gap-sm);\n }\n}\nsd-checkbox > ._indicator_rect {\n display: inline-block;\n vertical-align: -0.125em;\n user-select: none;\n width: calc(var(--font-size-default) + 2px);\n height: calc(var(--font-size-default) + 2px);\n border: 1px solid var(--border-color-light);\n background: var(--theme-secondary-lightest);\n}\nsd-checkbox > ._indicator_rect > ._indicator {\n margin: -1px -2px;\n text-align: center;\n opacity: 0;\n color: var(--text-trans-rev-default);\n}\nsd-checkbox > ._indicator_rect > ._indicator > ng-icon > svg {\n vertical-align: top;\n stroke-width: 2.5px !important;\n}\nsd-checkbox ._contents {\n display: inline-block;\n vertical-align: top;\n padding-left: var(--gap-sm);\n}\nsd-checkbox > ._indicator_rect + ._contents:empty {\n display: none;\n}\nsd-checkbox:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-checked=true] > ._indicator_rect {\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-checked=true] > ._indicator_rect > ._indicator {\n opacity: 1;\n}\nsd-checkbox[data-sd-theme=gray] > ._indicator_rect {\n background: var(--theme-gray-lightest);\n}\nsd-checkbox[data-sd-theme=gray] > ._indicator_rect > ._indicator {\n color: var(--theme-gray-default);\n}\nsd-checkbox[data-sd-theme=gray][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-gray-default);\n background: var(--theme-gray-default);\n}\nsd-checkbox[data-sd-theme=gray][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=gray]:focus > ._indicator_rect {\n border-color: var(--theme-gray-dark);\n}\nsd-checkbox[data-sd-theme=blue-gray] > ._indicator_rect {\n background: var(--theme-blue-gray-lightest);\n}\nsd-checkbox[data-sd-theme=blue-gray] > ._indicator_rect > ._indicator {\n color: var(--theme-blue-gray-default);\n}\nsd-checkbox[data-sd-theme=blue-gray][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-blue-gray-default);\n background: var(--theme-blue-gray-default);\n}\nsd-checkbox[data-sd-theme=blue-gray][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=blue-gray]:focus > ._indicator_rect {\n border-color: var(--theme-blue-gray-dark);\n}\nsd-checkbox[data-sd-theme=primary] > ._indicator_rect {\n background: var(--theme-primary-lightest);\n}\nsd-checkbox[data-sd-theme=primary] > ._indicator_rect > ._indicator {\n color: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=primary][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=primary][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=primary]:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-theme=secondary] > ._indicator_rect {\n background: var(--theme-secondary-lightest);\n}\nsd-checkbox[data-sd-theme=secondary] > ._indicator_rect > ._indicator {\n color: var(--theme-secondary-default);\n}\nsd-checkbox[data-sd-theme=secondary][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-secondary-default);\n background: var(--theme-secondary-default);\n}\nsd-checkbox[data-sd-theme=secondary][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=secondary]:focus > ._indicator_rect {\n border-color: var(--theme-secondary-dark);\n}\nsd-checkbox[data-sd-theme=info] > ._indicator_rect {\n background: var(--theme-info-lightest);\n}\nsd-checkbox[data-sd-theme=info] > ._indicator_rect > ._indicator {\n color: var(--theme-info-default);\n}\nsd-checkbox[data-sd-theme=info][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-info-default);\n background: var(--theme-info-default);\n}\nsd-checkbox[data-sd-theme=info][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=info]:focus > ._indicator_rect {\n border-color: var(--theme-info-dark);\n}\nsd-checkbox[data-sd-theme=success] > ._indicator_rect {\n background: var(--theme-success-lightest);\n}\nsd-checkbox[data-sd-theme=success] > ._indicator_rect > ._indicator {\n color: var(--theme-success-default);\n}\nsd-checkbox[data-sd-theme=success][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-success-default);\n background: var(--theme-success-default);\n}\nsd-checkbox[data-sd-theme=success][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=success]:focus > ._indicator_rect {\n border-color: var(--theme-success-dark);\n}\nsd-checkbox[data-sd-theme=warning] > ._indicator_rect {\n background: var(--theme-warning-lightest);\n}\nsd-checkbox[data-sd-theme=warning] > ._indicator_rect > ._indicator {\n color: var(--theme-warning-default);\n}\nsd-checkbox[data-sd-theme=warning][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-warning-default);\n background: var(--theme-warning-default);\n}\nsd-checkbox[data-sd-theme=warning][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=warning]:focus > ._indicator_rect {\n border-color: var(--theme-warning-dark);\n}\nsd-checkbox[data-sd-theme=danger] > ._indicator_rect {\n background: var(--theme-danger-lightest);\n}\nsd-checkbox[data-sd-theme=danger] > ._indicator_rect > ._indicator {\n color: var(--theme-danger-default);\n}\nsd-checkbox[data-sd-theme=danger][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-danger-default);\n background: var(--theme-danger-default);\n}\nsd-checkbox[data-sd-theme=danger][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=danger]:focus > ._indicator_rect {\n border-color: var(--theme-danger-dark);\n}\nsd-checkbox[data-sd-theme=white] > ._indicator_rect {\n background: var(--control-color);\n border-color: var(--text-trans-lightest);\n}\nsd-checkbox[data-sd-theme=white][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=white]:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-radio=true] > ._indicator_rect {\n border-radius: 100%;\n padding: var(--gap-xs);\n}\nsd-checkbox[data-sd-radio=true] > ._indicator_rect > ._indicator {\n border-radius: 100%;\n width: 100%;\n height: 100%;\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-radio=true][data-sd-checked=true] > ._indicator_rect {\n background: var(--theme-secondary-lightest);\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-size=sm] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-xs) * 2 + 2px);\n padding: var(--gap-xs) var(--gap-sm);\n gap: var(--gap-xs);\n}\n@supports not (appearance: auto) {\n sd-checkbox[data-sd-size=sm] {\n gap: 0;\n }\n sd-checkbox[data-sd-size=sm] > * + * {\n margin-left: var(--gap-xs);\n }\n}\nsd-checkbox[data-sd-size=lg] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-default) * 2 + 2px);\n padding: var(--gap-default) var(--gap-lg);\n gap: var(--gap-default);\n}\n@supports not (appearance: auto) {\n sd-checkbox[data-sd-size=lg] {\n gap: 0;\n }\n sd-checkbox[data-sd-size=lg] > * + * {\n margin-left: var(--gap-default);\n }\n}\nsd-checkbox[data-sd-inset=true] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-sm) * 2);\n border: none;\n justify-content: center;\n text-align: center;\n}\nsd-checkbox[data-sd-inset=true][data-sd-size=sm] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-xs) * 2);\n}\nsd-checkbox[data-sd-inset=true][data-sd-size=lg] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-default) * 2);\n}\nsd-checkbox[data-sd-inline=true] {\n display: inline-block;\n vertical-align: top;\n padding: 0;\n border: none;\n height: calc(var(--font-size-default) * var(--line-height-strip-unit));\n width: auto;\n}\nsd-checkbox[data-sd-disabled=true] {\n opacity: 0.3;\n pointer-events: none;\n}"] }]
104
+ }, styles: ["/*@function to-rgb($oklch-color) {\n @return color.to-space($oklch-color, rgb);\n}*/\n/*$colors: (\n red: to-rgb(oklch(0.704 0.191 22.216)),\n orange: to-rgb(oklch(0.75 0.183 55.934)),\n amber: to-rgb(oklch(0.828 0.189 84.429)),\n yellow: to-rgb(oklch(0.852 0.199 91.936)),\n lime: to-rgb(oklch(0.841 0.238 128.85)),\n green: to-rgb(oklch(0.792 0.209 151.711)),\n emerald: to-rgb(oklch(0.765 0.177 163.223)),\n teal: to-rgb(oklch(0.777 0.152 181.912)),\n cyan: to-rgb(oklch(0.789 0.154 211.53)),\n sky: to-rgb(oklch(0.746 0.16 232.661)),\n blue: to-rgb(oklch(0.707 0.165 254.624)),\n indigo: to-rgb(oklch(0.673 0.182 276.935)),\n violet: to-rgb(oklch(0.702 0.183 293.541)),\n purple: to-rgb(oklch(0.714 0.203 305.504)),\n fuchsia: to-rgb(oklch(0.74 0.238 322.16)),\n pink: to-rgb(oklch(0.718 0.202 349.761)),\n rose: to-rgb(oklch(0.712 0.194 13.428)),\n slate: to-rgb(oklch(0.704 0.04 256.788)),\n gray: to-rgb(oklch(0.707 0.022 261.325)),\n zinc: to-rgb(oklch(0.705 0.015 286.067)),\n neutral: to-rgb(oklch(0.708 0 0)),\n stone: to-rgb(oklch(0.709 0.01 56.259)),\n);*/\nsd-checkbox {\n display: block;\n padding: var(--gap-sm) var(--gap-default);\n border: 1px solid transparent;\n font-size: var(--font-size-default);\n font-family: var(--font-family);\n font-variant-numeric: tabular-nums;\n line-height: var(--line-height);\n color: var(--text-trans-default);\n color: inherit;\n cursor: pointer;\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-sm) * 2 + 2px);\n gap: var(--gap-sm);\n}\n@supports not (appearance: auto) {\n sd-checkbox {\n gap: 0;\n }\n sd-checkbox > * + * {\n margin-left: var(--gap-sm);\n }\n}\nsd-checkbox > ._indicator_rect {\n display: inline-block;\n vertical-align: -0.125em;\n user-select: none;\n width: calc(var(--font-size-default) + 2px);\n height: calc(var(--font-size-default) + 2px);\n border: 1px solid var(--border-color-light);\n background: var(--theme-secondary-lightest);\n}\nsd-checkbox > ._indicator_rect > ._indicator {\n margin: -1px -2px;\n text-align: center;\n opacity: 0;\n color: var(--text-trans-rev-default);\n}\nsd-checkbox > ._indicator_rect > ._indicator > ng-icon > svg {\n vertical-align: top;\n stroke-width: 2.5px !important;\n}\nsd-checkbox ._contents {\n display: inline-block;\n vertical-align: top;\n padding-left: var(--gap-sm);\n}\nsd-checkbox > ._indicator_rect + ._contents:empty {\n display: none;\n}\nsd-checkbox:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-checked=true] > ._indicator_rect > ._indicator {\n opacity: 1;\n}\nsd-checkbox[data-sd-theme=gray] > ._indicator_rect {\n background: var(--theme-gray-lightest);\n}\nsd-checkbox[data-sd-theme=gray] > ._indicator_rect > ._indicator {\n color: var(--theme-gray-default);\n}\nsd-checkbox[data-sd-theme=gray][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-gray-default);\n background: var(--theme-gray-default);\n}\nsd-checkbox[data-sd-theme=gray][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=gray]:focus > ._indicator_rect {\n border-color: var(--theme-gray-dark);\n}\nsd-checkbox[data-sd-theme=blue-gray] > ._indicator_rect {\n background: var(--theme-blue-gray-lightest);\n}\nsd-checkbox[data-sd-theme=blue-gray] > ._indicator_rect > ._indicator {\n color: var(--theme-blue-gray-default);\n}\nsd-checkbox[data-sd-theme=blue-gray][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-blue-gray-default);\n background: var(--theme-blue-gray-default);\n}\nsd-checkbox[data-sd-theme=blue-gray][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=blue-gray]:focus > ._indicator_rect {\n border-color: var(--theme-blue-gray-dark);\n}\nsd-checkbox[data-sd-theme=primary] > ._indicator_rect {\n background: var(--theme-primary-lightest);\n}\nsd-checkbox[data-sd-theme=primary] > ._indicator_rect > ._indicator {\n color: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=primary][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=primary][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=primary]:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-theme=secondary] > ._indicator_rect {\n background: var(--theme-secondary-lightest);\n}\nsd-checkbox[data-sd-theme=secondary] > ._indicator_rect > ._indicator {\n color: var(--theme-secondary-default);\n}\nsd-checkbox[data-sd-theme=secondary][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-secondary-default);\n background: var(--theme-secondary-default);\n}\nsd-checkbox[data-sd-theme=secondary][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=secondary]:focus > ._indicator_rect {\n border-color: var(--theme-secondary-dark);\n}\nsd-checkbox[data-sd-theme=info] > ._indicator_rect {\n background: var(--theme-info-lightest);\n}\nsd-checkbox[data-sd-theme=info] > ._indicator_rect > ._indicator {\n color: var(--theme-info-default);\n}\nsd-checkbox[data-sd-theme=info][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-info-default);\n background: var(--theme-info-default);\n}\nsd-checkbox[data-sd-theme=info][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=info]:focus > ._indicator_rect {\n border-color: var(--theme-info-dark);\n}\nsd-checkbox[data-sd-theme=success] > ._indicator_rect {\n background: var(--theme-success-lightest);\n}\nsd-checkbox[data-sd-theme=success] > ._indicator_rect > ._indicator {\n color: var(--theme-success-default);\n}\nsd-checkbox[data-sd-theme=success][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-success-default);\n background: var(--theme-success-default);\n}\nsd-checkbox[data-sd-theme=success][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=success]:focus > ._indicator_rect {\n border-color: var(--theme-success-dark);\n}\nsd-checkbox[data-sd-theme=warning] > ._indicator_rect {\n background: var(--theme-warning-lightest);\n}\nsd-checkbox[data-sd-theme=warning] > ._indicator_rect > ._indicator {\n color: var(--theme-warning-default);\n}\nsd-checkbox[data-sd-theme=warning][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-warning-default);\n background: var(--theme-warning-default);\n}\nsd-checkbox[data-sd-theme=warning][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=warning]:focus > ._indicator_rect {\n border-color: var(--theme-warning-dark);\n}\nsd-checkbox[data-sd-theme=danger] > ._indicator_rect {\n background: var(--theme-danger-lightest);\n}\nsd-checkbox[data-sd-theme=danger] > ._indicator_rect > ._indicator {\n color: var(--theme-danger-default);\n}\nsd-checkbox[data-sd-theme=danger][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-danger-default);\n background: var(--theme-danger-default);\n}\nsd-checkbox[data-sd-theme=danger][data-sd-checked=true] > ._indicator_rect > ._indicator {\n color: var(--text-trans-rev-default);\n}\nsd-checkbox[data-sd-theme=danger]:focus > ._indicator_rect {\n border-color: var(--theme-danger-dark);\n}\nsd-checkbox[data-sd-theme=white] > ._indicator_rect {\n background: var(--control-color);\n border-color: var(--text-trans-lightest);\n}\nsd-checkbox[data-sd-theme=white][data-sd-checked=true] > ._indicator_rect {\n border-color: var(--theme-primary-default);\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-theme=white]:focus > ._indicator_rect {\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-radio=true] > ._indicator_rect {\n border-radius: 100%;\n padding: var(--gap-xs);\n}\nsd-checkbox[data-sd-radio=true] > ._indicator_rect > ._indicator {\n border-radius: 100%;\n width: 100%;\n height: 100%;\n background: var(--theme-primary-default);\n}\nsd-checkbox[data-sd-radio=true][data-sd-checked=true] > ._indicator_rect {\n background: var(--theme-secondary-lightest);\n border-color: var(--theme-primary-dark);\n}\nsd-checkbox[data-sd-size=sm] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-xs) * 2 + 2px);\n padding: var(--gap-xs) var(--gap-sm);\n gap: var(--gap-xs);\n}\n@supports not (appearance: auto) {\n sd-checkbox[data-sd-size=sm] {\n gap: 0;\n }\n sd-checkbox[data-sd-size=sm] > * + * {\n margin-left: var(--gap-xs);\n }\n}\nsd-checkbox[data-sd-size=lg] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-default) * 2 + 2px);\n padding: var(--gap-default) var(--gap-lg);\n gap: var(--gap-default);\n}\n@supports not (appearance: auto) {\n sd-checkbox[data-sd-size=lg] {\n gap: 0;\n }\n sd-checkbox[data-sd-size=lg] > * + * {\n margin-left: var(--gap-default);\n }\n}\nsd-checkbox[data-sd-inset=true] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-sm) * 2);\n border: none;\n justify-content: center;\n text-align: center;\n}\nsd-checkbox[data-sd-inset=true][data-sd-size=sm] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-xs) * 2);\n}\nsd-checkbox[data-sd-inset=true][data-sd-size=lg] {\n height: calc(var(--font-size-default) * var(--line-height-strip-unit) + var(--gap-default) * 2);\n}\nsd-checkbox[data-sd-inline=true] {\n display: inline-block;\n vertical-align: top;\n padding: 0;\n border: none;\n height: calc(var(--font-size-default) * var(--line-height-strip-unit));\n width: auto;\n}\nsd-checkbox[data-sd-disabled=true] {\n opacity: 0.3;\n pointer-events: none;\n}"] }]
105
105
  }], () => [], { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], canChangeFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "canChangeFn", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], radio: [{ type: i0.Input, args: [{ isSignal: true, alias: "radio", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], inline: [{ type: i0.Input, args: [{ isSignal: true, alias: "inline", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], contentStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "contentStyle", required: false }] }] }); })();
106
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdCheckbox, { className: "SdCheckbox", filePath: "packages/angular/src/controls/checkbox/sd-checkbox.ts", lineNumber: 257 }); })();
106
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdCheckbox, { className: "SdCheckbox", filePath: "packages/angular/src/controls/checkbox/sd-checkbox.ts", lineNumber: 258 }); })();
@@ -0,0 +1,28 @@
1
+ import { type WritableSignal } from "@angular/core";
2
+ import { Editor } from "@tiptap/core";
3
+ import * as i0 from "@angular/core";
4
+ export declare class SdMarkdownEditor {
5
+ value: import("@angular/core").ModelSignal<string | undefined>;
6
+ disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
7
+ readonly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
8
+ required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
9
+ placeholder: import("@angular/core").InputSignal<string | undefined>;
10
+ validatorFn: import("@angular/core").InputSignal<((value: string | undefined) => string | undefined) | undefined>;
11
+ private readonly _elRef;
12
+ private readonly _destroyRef;
13
+ /** @internal -- TipTap Editor 인스턴스. 테스트 및 고급 사용자용 */
14
+ editor: WritableSignal<Editor | undefined>;
15
+ private readonly _toolbar;
16
+ activeStates: WritableSignal<import("./useTiptapToolbar").TiptapActiveStates>;
17
+ private _lastEditorMarkdown;
18
+ private _lastExtensions;
19
+ private readonly _resolvedExtensions;
20
+ constructor();
21
+ execCmd(cmd: string): void;
22
+ private _createEditor;
23
+ private _destroyEditor;
24
+ private _getEditorMarkdownFrom;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdMarkdownEditor, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdMarkdownEditor, "sd-markdown-editor", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "validatorFn": { "alias": "validatorFn"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
27
+ }
28
+ //# sourceMappingURL=sd-markdown-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sd-markdown-editor.d.ts","sourceRoot":"","sources":["../../../src/features/editor/sd-markdown-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,MAAM,EAAqB,MAAM,cAAc,CAAC;;AAWzD,qBA6Ha,gBAAgB;IAC3B,KAAK,0DAAmB;IACxB,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,QAAQ,qEAAiD;IACzD,WAAW,0DAAmB;IAC9B,WAAW,+CAAiB,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,eAAI;IAEzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAElD,qDAAqD;IACrD,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAqB;IAE/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,YAAY,kEAA8B;IAE1C,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,eAAe,CAA6B;IAEpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAMjC;;IA2DH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK1B,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,sBAAsB;yCAxHnB,gBAAgB;2CAAhB,gBAAgB;CA4H5B"}
@@ -0,0 +1,250 @@
1
+ import { booleanAttribute, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, input, model, signal, untracked, ViewEncapsulation, } from "@angular/core";
2
+ import { setupInvalid } from "../../core/validation/setupInvalid";
3
+ import { Editor } from "@tiptap/core";
4
+ import StarterKit from "@tiptap/starter-kit";
5
+ import Placeholder from "@tiptap/extension-placeholder";
6
+ import { Markdown } from "@tiptap/markdown";
7
+ import { useTiptapToolbar } from "./useTiptapToolbar";
8
+ import * as i0 from "@angular/core";
9
+ function SdMarkdownEditor_Conditional_0_Template(rf, ctx) { if (rf & 1) {
10
+ const _r1 = i0.ɵɵgetCurrentView();
11
+ i0.ɵɵdomElementStart(0, "div", 0)(1, "div", 2)(2, "button", 3);
12
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("h1")); });
13
+ i0.ɵɵtext(3, "H1");
14
+ i0.ɵɵdomElementEnd();
15
+ i0.ɵɵdomElementStart(4, "button", 4);
16
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("h2")); });
17
+ i0.ɵɵtext(5, "H2");
18
+ i0.ɵɵdomElementEnd()();
19
+ i0.ɵɵdomElementStart(6, "div", 2)(7, "button", 5);
20
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("bold")); });
21
+ i0.ɵɵtext(8, "B");
22
+ i0.ɵɵdomElementEnd();
23
+ i0.ɵɵdomElementStart(9, "button", 6);
24
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("italic")); });
25
+ i0.ɵɵtext(10, "I");
26
+ i0.ɵɵdomElementEnd();
27
+ i0.ɵɵdomElementStart(11, "button", 7);
28
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("strike")); });
29
+ i0.ɵɵtext(12, "S");
30
+ i0.ɵɵdomElementEnd()();
31
+ i0.ɵɵdomElementStart(13, "div", 2)(14, "button", 8);
32
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("bulletList")); });
33
+ i0.ɵɵtext(15, "UL");
34
+ i0.ɵɵdomElementEnd();
35
+ i0.ɵɵdomElementStart(16, "button", 9);
36
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("orderedList")); });
37
+ i0.ɵɵtext(17, "OL");
38
+ i0.ɵɵdomElementEnd();
39
+ i0.ɵɵdomElementStart(18, "button", 10);
40
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("indent")); });
41
+ i0.ɵɵtext(19, "\u2192");
42
+ i0.ɵɵdomElementEnd();
43
+ i0.ɵɵdomElementStart(20, "button", 11);
44
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("outdent")); });
45
+ i0.ɵɵtext(21, "\u2190");
46
+ i0.ɵɵdomElementEnd()();
47
+ i0.ɵɵdomElementStart(22, "div", 2)(23, "button", 12);
48
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("blockquote")); });
49
+ i0.ɵɵtext(24, "\u275D");
50
+ i0.ɵɵdomElementEnd();
51
+ i0.ɵɵdomElementStart(25, "button", 13);
52
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("codeBlock")); });
53
+ i0.ɵɵtext(26, "</>");
54
+ i0.ɵɵdomElementEnd()();
55
+ i0.ɵɵdomElementStart(27, "div", 2)(28, "button", 14);
56
+ i0.ɵɵdomListener("click", function SdMarkdownEditor_Conditional_0_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.execCmd("clean")); });
57
+ i0.ɵɵtext(29, "Tx");
58
+ i0.ɵɵdomElementEnd()()();
59
+ } if (rf & 2) {
60
+ const ctx_r1 = i0.ɵɵnextContext();
61
+ i0.ɵɵadvance(2);
62
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().h1);
63
+ i0.ɵɵadvance(2);
64
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().h2);
65
+ i0.ɵɵadvance(3);
66
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().bold);
67
+ i0.ɵɵadvance(2);
68
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().italic);
69
+ i0.ɵɵadvance(2);
70
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().strike);
71
+ i0.ɵɵadvance(3);
72
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().bulletList);
73
+ i0.ɵɵadvance(2);
74
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().orderedList);
75
+ i0.ɵɵadvance(7);
76
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().blockquote);
77
+ i0.ɵɵadvance(2);
78
+ i0.ɵɵclassProp("_active", ctx_r1.activeStates().codeBlock);
79
+ } }
80
+ const DEFAULT_EXTENSIONS = [
81
+ StarterKit,
82
+ Markdown,
83
+ ];
84
+ export class SdMarkdownEditor {
85
+ value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
86
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
87
+ readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
88
+ required = input(false, { ...(ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
89
+ placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
90
+ validatorFn = input(...(ngDevMode ? [undefined, { debugName: "validatorFn" }] : /* istanbul ignore next */ []));
91
+ _elRef = inject(ElementRef);
92
+ _destroyRef = inject(DestroyRef);
93
+ /** @internal -- TipTap Editor 인스턴스. 테스트 및 고급 사용자용 */
94
+ editor = signal(undefined, ...(ngDevMode ? [{ debugName: "editor" }] : /* istanbul ignore next */ []));
95
+ _toolbar = useTiptapToolbar({ editor: this.editor });
96
+ activeStates = this._toolbar.activeStates;
97
+ _lastEditorMarkdown;
98
+ _lastExtensions;
99
+ _resolvedExtensions = computed(() => {
100
+ const ph = this.placeholder();
101
+ if (ph != null) {
102
+ return [...DEFAULT_EXTENSIONS, Placeholder.configure({ placeholder: ph })];
103
+ }
104
+ return DEFAULT_EXTENSIONS;
105
+ }, ...(ngDevMode ? [{ debugName: "_resolvedExtensions" }] : /* istanbul ignore next */ []));
106
+ constructor() {
107
+ effect(() => {
108
+ const extensions = this._resolvedExtensions();
109
+ const value = this.value();
110
+ const val = value === "" ? undefined : value;
111
+ if (value === "") {
112
+ untracked(() => this.value.set(undefined));
113
+ }
114
+ if (this._lastExtensions !== extensions) {
115
+ this._lastExtensions = extensions;
116
+ this._destroyEditor();
117
+ this._createEditor(extensions, val);
118
+ return;
119
+ }
120
+ if (val === this._lastEditorMarkdown)
121
+ return;
122
+ const currentEditor = untracked(() => this.editor());
123
+ if (currentEditor == null)
124
+ return;
125
+ const currentMarkdown = this._getEditorMarkdownFrom(currentEditor);
126
+ if (currentMarkdown === val)
127
+ return;
128
+ currentEditor.commands.setContent(val ?? "", { contentType: "markdown", emitUpdate: false });
129
+ this._lastEditorMarkdown = undefined;
130
+ });
131
+ effect(() => {
132
+ const ed = this.editor();
133
+ if (ed == null)
134
+ return;
135
+ const editable = !this.disabled() && !this.readonly();
136
+ ed.setEditable(editable);
137
+ });
138
+ setupInvalid(() => {
139
+ const errorMessages = [];
140
+ if (this.value() == null) {
141
+ if (this.required()) {
142
+ errorMessages.push("값을 입력하세요.");
143
+ }
144
+ }
145
+ const validatorFn = this.validatorFn();
146
+ if (validatorFn != null) {
147
+ const message = validatorFn(this.value());
148
+ if (message != null) {
149
+ errorMessages.push(message);
150
+ }
151
+ }
152
+ return errorMessages.join("\r\n");
153
+ });
154
+ this._destroyRef.onDestroy(() => {
155
+ this._destroyEditor();
156
+ });
157
+ }
158
+ execCmd(cmd) {
159
+ if (this.disabled() || this.readonly())
160
+ return;
161
+ this._toolbar.execCmd(cmd);
162
+ }
163
+ _createEditor(extensions, initialContent) {
164
+ const container = this._elRef.nativeElement.querySelector("._editor-container");
165
+ if (container == null)
166
+ return;
167
+ this.editor.set(new Editor({
168
+ element: container,
169
+ extensions,
170
+ content: initialContent ?? "",
171
+ contentType: "markdown",
172
+ editable: untracked(() => !this.disabled() && !this.readonly()),
173
+ onUpdate: ({ editor }) => {
174
+ const markdown = this._getEditorMarkdownFrom(editor);
175
+ this._lastEditorMarkdown = markdown;
176
+ this.value.set(markdown);
177
+ },
178
+ onTransaction: () => {
179
+ this._toolbar.refreshActiveStates();
180
+ },
181
+ }));
182
+ }
183
+ _destroyEditor() {
184
+ const ed = untracked(() => this.editor());
185
+ if (ed != null) {
186
+ ed.destroy();
187
+ this.editor.set(undefined);
188
+ }
189
+ this._lastEditorMarkdown = undefined;
190
+ }
191
+ _getEditorMarkdownFrom(editor) {
192
+ if (editor.isEmpty)
193
+ return undefined;
194
+ return editor.getMarkdown();
195
+ }
196
+ static ɵfac = function SdMarkdownEditor_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SdMarkdownEditor)(); };
197
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SdMarkdownEditor, selectors: [["sd-markdown-editor"]], hostVars: 2, hostBindings: function SdMarkdownEditor_HostBindings(rf, ctx) { if (rf & 2) {
198
+ i0.ɵɵattribute("data-sd-disabled", ctx.disabled())("data-sd-readonly", ctx.readonly());
199
+ } }, inputs: { value: [1, "value"], disabled: [1, "disabled"], readonly: [1, "readonly"], required: [1, "required"], placeholder: [1, "placeholder"], validatorFn: [1, "validatorFn"] }, outputs: { value: "valueChange" }, decls: 2, vars: 1, consts: [[1, "_toolbar"], [1, "_editor-container"], [1, "_btn-group"], ["type", "button", "data-cmd", "h1", 3, "click"], ["type", "button", "data-cmd", "h2", 3, "click"], ["type", "button", "data-cmd", "bold", 3, "click"], ["type", "button", "data-cmd", "italic", 3, "click"], ["type", "button", "data-cmd", "strike", 3, "click"], ["type", "button", "data-cmd", "bulletList", 3, "click"], ["type", "button", "data-cmd", "orderedList", 3, "click"], ["type", "button", "data-cmd", "indent", 3, "click"], ["type", "button", "data-cmd", "outdent", 3, "click"], ["type", "button", "data-cmd", "blockquote", 3, "click"], ["type", "button", "data-cmd", "codeBlock", 3, "click"], ["type", "button", "data-cmd", "clean", 3, "click"]], template: function SdMarkdownEditor_Template(rf, ctx) { if (rf & 1) {
200
+ i0.ɵɵconditionalCreate(0, SdMarkdownEditor_Conditional_0_Template, 30, 18, "div", 0);
201
+ i0.ɵɵdomElement(1, "div", 1);
202
+ } if (rf & 2) {
203
+ i0.ɵɵconditional(!ctx.disabled() && !ctx.readonly() ? 0 : -1);
204
+ } }, styles: ["sd-markdown-editor {\n display: block;\n position: relative;\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n background: var(--theme-secondary-lightest);\n}\nsd-markdown-editor > ._toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: var(--gap-xs);\n padding: var(--gap-xs);\n border-bottom: 1px solid var(--trans-lighter);\n}\nsd-markdown-editor > ._toolbar > ._btn-group {\n display: flex;\n gap: 1px;\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button {\n padding: var(--gap-xs) var(--gap-sm);\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n background: transparent;\n cursor: pointer;\n font-size: var(--font-size-default);\n line-height: 1;\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button._active {\n background: var(--theme-primary-default);\n color: var(--text-trans-rev-default);\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button:hover {\n background: var(--trans-lighter);\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button._active:hover {\n background: var(--theme-primary-default);\n}\nsd-markdown-editor > ._editor-container {\n padding: var(--gap-sm);\n min-height: 6.25rem;\n font-family: var(--font-family-field);\n}\nsd-markdown-editor > ._editor-container > .tiptap {\n outline: none;\n}\nsd-markdown-editor > ._editor-container > .tiptap:focus {\n outline: none;\n}\nsd-markdown-editor[data-sd-disabled=true] {\n background: var(--theme-gray-lightest);\n color: var(--text-trans-light);\n}\nsd-markdown-editor[data-sd-disabled=true] > ._editor-container > .tiptap {\n cursor: not-allowed;\n}\nsd-markdown-editor[data-sd-readonly=true] > ._editor-container > .tiptap {\n cursor: default;\n}"], encapsulation: 2, changeDetection: 0 });
205
+ }
206
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SdMarkdownEditor, [{
207
+ type: Component,
208
+ args: [{ selector: "sd-markdown-editor", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [], template: `
209
+ @if (!disabled() && !readonly()) {
210
+ <div class="_toolbar">
211
+ <div class="_btn-group">
212
+ <button type="button" data-cmd="h1" [class._active]="activeStates().h1"
213
+ (click)="execCmd('h1')">H1</button>
214
+ <button type="button" data-cmd="h2" [class._active]="activeStates().h2"
215
+ (click)="execCmd('h2')">H2</button>
216
+ </div>
217
+ <div class="_btn-group">
218
+ <button type="button" data-cmd="bold" [class._active]="activeStates().bold"
219
+ (click)="execCmd('bold')">B</button>
220
+ <button type="button" data-cmd="italic" [class._active]="activeStates().italic"
221
+ (click)="execCmd('italic')">I</button>
222
+ <button type="button" data-cmd="strike" [class._active]="activeStates().strike"
223
+ (click)="execCmd('strike')">S</button>
224
+ </div>
225
+ <div class="_btn-group">
226
+ <button type="button" data-cmd="bulletList" [class._active]="activeStates().bulletList"
227
+ (click)="execCmd('bulletList')">UL</button>
228
+ <button type="button" data-cmd="orderedList" [class._active]="activeStates().orderedList"
229
+ (click)="execCmd('orderedList')">OL</button>
230
+ <button type="button" data-cmd="indent" (click)="execCmd('indent')">→</button>
231
+ <button type="button" data-cmd="outdent" (click)="execCmd('outdent')">←</button>
232
+ </div>
233
+ <div class="_btn-group">
234
+ <button type="button" data-cmd="blockquote" [class._active]="activeStates().blockquote"
235
+ (click)="execCmd('blockquote')">❝</button>
236
+ <button type="button" data-cmd="codeBlock" [class._active]="activeStates().codeBlock"
237
+ (click)="execCmd('codeBlock')">&lt;/&gt;</button>
238
+ </div>
239
+ <div class="_btn-group">
240
+ <button type="button" data-cmd="clean" (click)="execCmd('clean')">Tx</button>
241
+ </div>
242
+ </div>
243
+ }
244
+ <div class="_editor-container"></div>
245
+ `, host: {
246
+ "[attr.data-sd-disabled]": "disabled()",
247
+ "[attr.data-sd-readonly]": "readonly()",
248
+ }, styles: ["sd-markdown-editor {\n display: block;\n position: relative;\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n background: var(--theme-secondary-lightest);\n}\nsd-markdown-editor > ._toolbar {\n display: flex;\n flex-wrap: wrap;\n gap: var(--gap-xs);\n padding: var(--gap-xs);\n border-bottom: 1px solid var(--trans-lighter);\n}\nsd-markdown-editor > ._toolbar > ._btn-group {\n display: flex;\n gap: 1px;\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button {\n padding: var(--gap-xs) var(--gap-sm);\n border: 1px solid var(--trans-lighter);\n border-radius: var(--border-radius-default);\n background: transparent;\n cursor: pointer;\n font-size: var(--font-size-default);\n line-height: 1;\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button._active {\n background: var(--theme-primary-default);\n color: var(--text-trans-rev-default);\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button:hover {\n background: var(--trans-lighter);\n}\nsd-markdown-editor > ._toolbar > ._btn-group > button._active:hover {\n background: var(--theme-primary-default);\n}\nsd-markdown-editor > ._editor-container {\n padding: var(--gap-sm);\n min-height: 6.25rem;\n font-family: var(--font-family-field);\n}\nsd-markdown-editor > ._editor-container > .tiptap {\n outline: none;\n}\nsd-markdown-editor > ._editor-container > .tiptap:focus {\n outline: none;\n}\nsd-markdown-editor[data-sd-disabled=true] {\n background: var(--theme-gray-lightest);\n color: var(--text-trans-light);\n}\nsd-markdown-editor[data-sd-disabled=true] > ._editor-container > .tiptap {\n cursor: not-allowed;\n}\nsd-markdown-editor[data-sd-readonly=true] > ._editor-container > .tiptap {\n cursor: default;\n}"] }]
249
+ }], () => [], { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], validatorFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "validatorFn", required: false }] }] }); })();
250
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SdMarkdownEditor, { className: "SdMarkdownEditor", filePath: "packages/angular/src/features/editor/sd-markdown-editor.ts", lineNumber: 154 }); })();
package/dist/index.d.ts CHANGED
@@ -111,6 +111,7 @@ export { SdThemeProvider } from "./features/theme/sd-theme-provider";
111
111
  export { SdThemeSelector } from "./features/theme/sd-theme-selector";
112
112
  export { SdAddressSearchModal, type Address, } from "./features/address/sd-address-search.modal";
113
113
  export { SdTiptapEditor } from "./features/editor/sd-tiptap-editor";
114
+ export { SdMarkdownEditor } from "./features/editor/sd-markdown-editor";
114
115
  export { SdLabel } from "./features/visual/sd-label";
115
116
  export { SdNote } from "./features/visual/sd-note";
116
117
  export { SdProgress } from "./features/visual/sd-progress";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -148,6 +148,7 @@ export { SdThemeSelector } from "./features/theme/sd-theme-selector";
148
148
  export { SdAddressSearchModal, } from "./features/address/sd-address-search.modal";
149
149
  // features/editor
150
150
  export { SdTiptapEditor } from "./features/editor/sd-tiptap-editor";
151
+ export { SdMarkdownEditor } from "./features/editor/sd-markdown-editor";
151
152
  // features/visual
152
153
  export { SdLabel } from "./features/visual/sd-label";
153
154
  export { SdNote } from "./features/visual/sd-note";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/angular",
3
- "version": "14.0.102",
3
+ "version": "14.1.2",
4
4
  "description": "심플리즘 패키지 - Angular",
5
5
  "author": "심플리즘",
6
6
  "license": "Apache-2.0",
@@ -31,30 +31,31 @@
31
31
  "@angular/platform-browser": "^21.2.17",
32
32
  "@angular/router": "^21.2.17",
33
33
  "@angular/service-worker": "^21.2.17",
34
- "@ng-icons/core": "^33.2.4",
35
- "@ng-icons/tabler-icons": "^33.2.4",
36
- "@tiptap/core": "^3.26.1",
37
- "@tiptap/extension-color": "^3.26.1",
38
- "@tiptap/extension-document": "^3.26.1",
39
- "@tiptap/extension-highlight": "^3.26.1",
40
- "@tiptap/extension-image": "^3.26.1",
41
- "@tiptap/extension-paragraph": "^3.26.1",
42
- "@tiptap/extension-placeholder": "^3.26.1",
43
- "@tiptap/extension-text": "^3.26.1",
44
- "@tiptap/extension-text-align": "^3.26.1",
45
- "@tiptap/extension-text-style": "^3.26.1",
46
- "@tiptap/extension-underline": "^3.26.1",
47
- "@tiptap/starter-kit": "^3.26.1",
34
+ "@ng-icons/core": "^33.3.0",
35
+ "@ng-icons/tabler-icons": "^33.3.0",
36
+ "@tiptap/core": "^3.27.1",
37
+ "@tiptap/extension-color": "^3.27.1",
38
+ "@tiptap/extension-document": "^3.27.1",
39
+ "@tiptap/extension-highlight": "^3.27.1",
40
+ "@tiptap/extension-image": "^3.27.1",
41
+ "@tiptap/extension-paragraph": "^3.27.1",
42
+ "@tiptap/extension-placeholder": "^3.27.1",
43
+ "@tiptap/extension-text": "^3.27.1",
44
+ "@tiptap/extension-text-align": "^3.27.1",
45
+ "@tiptap/extension-text-style": "^3.27.1",
46
+ "@tiptap/extension-underline": "^3.27.1",
47
+ "@tiptap/markdown": "^3.27.1",
48
+ "@tiptap/starter-kit": "^3.27.1",
48
49
  "bwip-js": "^4.11.1",
49
50
  "echarts": "^6.1.0",
50
51
  "html-to-image": "^1.11.13",
51
52
  "jspdf": "^4.2.1",
52
53
  "rxjs": "^7.8.2",
53
- "tabbable": "^6.4.0",
54
- "@simplysm/core-common": "14.0.102",
55
- "@simplysm/core-browser": "14.0.102",
56
- "@simplysm/service-client": "14.0.102",
57
- "@simplysm/service-common": "14.0.102"
54
+ "tabbable": "^6.5.0",
55
+ "@simplysm/core-browser": "14.1.2",
56
+ "@simplysm/service-client": "14.1.2",
57
+ "@simplysm/service-common": "14.1.2",
58
+ "@simplysm/core-common": "14.1.2"
58
59
  },
59
60
  "devDependencies": {
60
61
  "@angular/compiler": "^21.2.17",
@@ -41,34 +41,6 @@ body.sd-theme-blueprint,
41
41
  }
42
42
  }
43
43
 
44
- .sd-theme-blueprint sd-permission-table table > * > tr > * {
45
- border-bottom: 1px solid var(--border-color-lighter);
46
- }
47
-
48
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="first"] > *._before,
49
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="first"] > *._title,
50
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="first"] > *._after {
51
- background: var(--trans-lighter);
52
- border-top: 1px solid var(--border-color-default);
53
- border-bottom: 1px solid var(--border-color-default);
54
- color: var(--text-trans-default);
55
- font-weight: 700;
56
-
57
- > * {
58
- color: var(--text-trans-default) !important;
59
- }
60
- }
61
-
62
- // 하위 depth 틴트(info/warning/success lightest) 제거 → 무지, 행 헤어라인으로만 구분
63
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="info"] > *._title,
64
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="info"] > *._after,
65
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="warning"] > *._title,
66
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="warning"] > *._after,
67
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="success"] > *._title,
68
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme="success"] > *._after {
69
- background: transparent;
70
- }
71
-
72
44
  .sd-theme-blueprint {
73
45
  sd-modal > ._dialog > ._header {
74
46
  background: var(--theme-primary-default);
@@ -86,4 +58,30 @@ body.sd-theme-blueprint,
86
58
  sd-crud-detail > sd-base-container > sd-busy-container > .bg-control > .main-align-end {
87
59
  background: var(--theme-gray-lightest);
88
60
  }
61
+
62
+ sd-permission-table {
63
+ > table > * > tr[data-sd-theme="first"] > *._before,
64
+ > table > * > tr[data-sd-theme="first"] > *._title,
65
+ > table > * > tr[data-sd-theme="first"] > *._after {
66
+ border-radius: 0;
67
+ box-shadow: inset 0 -1px 0 var(--border-color-lighter);
68
+ background: var(--theme-gray-lighter);
69
+ font-weight: bold;
70
+
71
+ > * {
72
+ color: var(--text-trans-default) !important;
73
+ }
74
+ }
75
+
76
+ > table > * > tr[data-sd-theme="info"] > *._title,
77
+ > table > * > tr[data-sd-theme="info"] > *._after,
78
+ > table > * > tr[data-sd-theme="warning"] > *._title,
79
+ > table > * > tr[data-sd-theme="warning"] > *._after,
80
+ > table > * > tr[data-sd-theme="success"] > *._title,
81
+ > table > * > tr[data-sd-theme="success"] > *._after {
82
+ border-radius: 0;
83
+ box-shadow: inset 0 -1px 0 var(--border-color-lighter);
84
+ background: var(--theme-gray-lightest);
85
+ }
86
+ }
89
87
  }
@@ -59,9 +59,9 @@ $paper: (
59
59
  darkest: colors.get(green, 800)
60
60
  ),
61
61
  warning: (
62
- lightest: colors.get(orange, 50),
63
- lighter: colors.get(orange, 100),
64
- light: colors.get(orange, 200),
62
+ lightest: colors.get(orange, 100),
63
+ lighter: colors.get(orange, 200),
64
+ light: colors.get(orange, 300),
65
65
  default: colors.get(orange, 400),
66
66
  dark: colors.get(orange, 600),
67
67
  darker: colors.get(orange, 700),
@@ -96,6 +96,7 @@ import { tablerCheck } from "@ng-icons/tabler-icons";
96
96
 
97
97
  &[data-sd-checked="true"] {
98
98
  > ._indicator_rect {
99
+ border-color: var(--theme-primary-default);
99
100
  background: var(--theme-primary-default);
100
101
 
101
102
  > ._indicator {
@@ -0,0 +1,278 @@
1
+ import {
2
+ booleanAttribute,
3
+ ChangeDetectionStrategy,
4
+ Component,
5
+ computed,
6
+ DestroyRef,
7
+ effect,
8
+ ElementRef,
9
+ inject,
10
+ input,
11
+ model,
12
+ signal,
13
+ untracked,
14
+ ViewEncapsulation,
15
+ type WritableSignal,
16
+ } from "@angular/core";
17
+ import { setupInvalid } from "../../core/validation/setupInvalid";
18
+ import { Editor, type AnyExtension } from "@tiptap/core";
19
+ import StarterKit from "@tiptap/starter-kit";
20
+ import Placeholder from "@tiptap/extension-placeholder";
21
+ import { Markdown } from "@tiptap/markdown";
22
+ import { useTiptapToolbar } from "./useTiptapToolbar";
23
+
24
+ const DEFAULT_EXTENSIONS: AnyExtension[] = [
25
+ StarterKit,
26
+ Markdown,
27
+ ];
28
+
29
+ @Component({
30
+ selector: "sd-markdown-editor",
31
+ changeDetection: ChangeDetectionStrategy.OnPush,
32
+ encapsulation: ViewEncapsulation.None,
33
+ standalone: true,
34
+ imports: [],
35
+ template: `
36
+ @if (!disabled() && !readonly()) {
37
+ <div class="_toolbar">
38
+ <div class="_btn-group">
39
+ <button type="button" data-cmd="h1" [class._active]="activeStates().h1"
40
+ (click)="execCmd('h1')">H1</button>
41
+ <button type="button" data-cmd="h2" [class._active]="activeStates().h2"
42
+ (click)="execCmd('h2')">H2</button>
43
+ </div>
44
+ <div class="_btn-group">
45
+ <button type="button" data-cmd="bold" [class._active]="activeStates().bold"
46
+ (click)="execCmd('bold')">B</button>
47
+ <button type="button" data-cmd="italic" [class._active]="activeStates().italic"
48
+ (click)="execCmd('italic')">I</button>
49
+ <button type="button" data-cmd="strike" [class._active]="activeStates().strike"
50
+ (click)="execCmd('strike')">S</button>
51
+ </div>
52
+ <div class="_btn-group">
53
+ <button type="button" data-cmd="bulletList" [class._active]="activeStates().bulletList"
54
+ (click)="execCmd('bulletList')">UL</button>
55
+ <button type="button" data-cmd="orderedList" [class._active]="activeStates().orderedList"
56
+ (click)="execCmd('orderedList')">OL</button>
57
+ <button type="button" data-cmd="indent" (click)="execCmd('indent')">→</button>
58
+ <button type="button" data-cmd="outdent" (click)="execCmd('outdent')">←</button>
59
+ </div>
60
+ <div class="_btn-group">
61
+ <button type="button" data-cmd="blockquote" [class._active]="activeStates().blockquote"
62
+ (click)="execCmd('blockquote')">❝</button>
63
+ <button type="button" data-cmd="codeBlock" [class._active]="activeStates().codeBlock"
64
+ (click)="execCmd('codeBlock')">&lt;/&gt;</button>
65
+ </div>
66
+ <div class="_btn-group">
67
+ <button type="button" data-cmd="clean" (click)="execCmd('clean')">Tx</button>
68
+ </div>
69
+ </div>
70
+ }
71
+ <div class="_editor-container"></div>
72
+ `,
73
+ styles: [
74
+ /* language=SCSS */ `
75
+ sd-markdown-editor {
76
+ display: block;
77
+ position: relative;
78
+ border: 1px solid var(--trans-lighter);
79
+ border-radius: var(--border-radius-default);
80
+ background: var(--theme-secondary-lightest);
81
+
82
+ > ._toolbar {
83
+ display: flex;
84
+ flex-wrap: wrap;
85
+ gap: var(--gap-xs);
86
+ padding: var(--gap-xs);
87
+ border-bottom: 1px solid var(--trans-lighter);
88
+
89
+ > ._btn-group {
90
+ display: flex;
91
+ gap: 1px;
92
+
93
+ > button {
94
+ padding: var(--gap-xs) var(--gap-sm);
95
+ border: 1px solid var(--trans-lighter);
96
+ border-radius: var(--border-radius-default);
97
+ background: transparent;
98
+ cursor: pointer;
99
+ font-size: var(--font-size-default);
100
+ line-height: 1;
101
+
102
+ &._active {
103
+ background: var(--theme-primary-default);
104
+ color: var(--text-trans-rev-default);
105
+ }
106
+
107
+ &:hover {
108
+ background: var(--trans-lighter);
109
+ }
110
+
111
+ &._active:hover {
112
+ background: var(--theme-primary-default);
113
+ }
114
+ }
115
+ }
116
+ }
117
+
118
+ > ._editor-container {
119
+ padding: var(--gap-sm);
120
+ min-height: 6.25rem;
121
+ font-family: var(--font-family-field);
122
+
123
+ > .tiptap {
124
+ outline: none;
125
+
126
+ &:focus {
127
+ outline: none;
128
+ }
129
+ }
130
+ }
131
+
132
+ &[data-sd-disabled="true"] {
133
+ background: var(--theme-gray-lightest);
134
+ color: var(--text-trans-light);
135
+
136
+ > ._editor-container > .tiptap {
137
+ cursor: not-allowed;
138
+ }
139
+ }
140
+
141
+ &[data-sd-readonly="true"] {
142
+ > ._editor-container > .tiptap {
143
+ cursor: default;
144
+ }
145
+ }
146
+ }
147
+ `,
148
+ ],
149
+ host: {
150
+ "[attr.data-sd-disabled]": "disabled()",
151
+ "[attr.data-sd-readonly]": "readonly()",
152
+ },
153
+ })
154
+ export class SdMarkdownEditor {
155
+ value = model<string>();
156
+ disabled = input(false, { transform: booleanAttribute });
157
+ readonly = input(false, { transform: booleanAttribute });
158
+ required = input(false, { transform: booleanAttribute });
159
+ placeholder = input<string>();
160
+ validatorFn = input<(value: string | undefined) => string | undefined>();
161
+
162
+ private readonly _elRef = inject<ElementRef<HTMLElement>>(ElementRef);
163
+ private readonly _destroyRef = inject(DestroyRef);
164
+
165
+ /** @internal -- TipTap Editor 인스턴스. 테스트 및 고급 사용자용 */
166
+ editor: WritableSignal<Editor | undefined> = signal(undefined);
167
+
168
+ private readonly _toolbar = useTiptapToolbar({ editor: this.editor });
169
+ activeStates = this._toolbar.activeStates;
170
+
171
+ private _lastEditorMarkdown: string | undefined;
172
+ private _lastExtensions: AnyExtension[] | undefined;
173
+
174
+ private readonly _resolvedExtensions = computed(() => {
175
+ const ph = this.placeholder();
176
+ if (ph != null) {
177
+ return [...DEFAULT_EXTENSIONS, Placeholder.configure({ placeholder: ph })];
178
+ }
179
+ return DEFAULT_EXTENSIONS;
180
+ });
181
+
182
+ constructor() {
183
+ effect(() => {
184
+ const extensions = this._resolvedExtensions();
185
+ const value = this.value();
186
+ const val = value === "" ? undefined : value;
187
+ if (value === "") {
188
+ untracked(() => this.value.set(undefined));
189
+ }
190
+
191
+ if (this._lastExtensions !== extensions) {
192
+ this._lastExtensions = extensions;
193
+ this._destroyEditor();
194
+ this._createEditor(extensions, val);
195
+ return;
196
+ }
197
+
198
+ if (val === this._lastEditorMarkdown) return;
199
+
200
+ const currentEditor = untracked(() => this.editor());
201
+ if (currentEditor == null) return;
202
+ const currentMarkdown = this._getEditorMarkdownFrom(currentEditor);
203
+ if (currentMarkdown === val) return;
204
+ currentEditor.commands.setContent(val ?? "", { contentType: "markdown", emitUpdate: false });
205
+ this._lastEditorMarkdown = undefined;
206
+ });
207
+
208
+ effect(() => {
209
+ const ed = this.editor();
210
+ if (ed == null) return;
211
+ const editable = !this.disabled() && !this.readonly();
212
+ ed.setEditable(editable);
213
+ });
214
+
215
+ setupInvalid(() => {
216
+ const errorMessages: string[] = [];
217
+ if (this.value() == null) {
218
+ if (this.required()) {
219
+ errorMessages.push("값을 입력하세요.");
220
+ }
221
+ }
222
+
223
+ const validatorFn = this.validatorFn();
224
+ if (validatorFn != null) {
225
+ const message = validatorFn(this.value());
226
+ if (message != null) {
227
+ errorMessages.push(message);
228
+ }
229
+ }
230
+
231
+ return errorMessages.join("\r\n");
232
+ });
233
+
234
+ this._destroyRef.onDestroy(() => {
235
+ this._destroyEditor();
236
+ });
237
+ }
238
+
239
+ execCmd(cmd: string): void {
240
+ if (this.disabled() || this.readonly()) return;
241
+ this._toolbar.execCmd(cmd);
242
+ }
243
+
244
+ private _createEditor(extensions: AnyExtension[], initialContent: string | undefined): void {
245
+ const container = this._elRef.nativeElement.querySelector("._editor-container");
246
+ if (container == null) return;
247
+
248
+ this.editor.set(new Editor({
249
+ element: container,
250
+ extensions,
251
+ content: initialContent ?? "",
252
+ contentType: "markdown",
253
+ editable: untracked(() => !this.disabled() && !this.readonly()),
254
+ onUpdate: ({ editor }) => {
255
+ const markdown = this._getEditorMarkdownFrom(editor);
256
+ this._lastEditorMarkdown = markdown;
257
+ this.value.set(markdown);
258
+ },
259
+ onTransaction: () => {
260
+ this._toolbar.refreshActiveStates();
261
+ },
262
+ }));
263
+ }
264
+
265
+ private _destroyEditor(): void {
266
+ const ed = untracked(() => this.editor());
267
+ if (ed != null) {
268
+ ed.destroy();
269
+ this.editor.set(undefined);
270
+ }
271
+ this._lastEditorMarkdown = undefined;
272
+ }
273
+
274
+ private _getEditorMarkdownFrom(editor: Editor): string | undefined {
275
+ if (editor.isEmpty) return undefined;
276
+ return editor.getMarkdown();
277
+ }
278
+ }
package/src/index.ts CHANGED
@@ -264,6 +264,7 @@ export {
264
264
 
265
265
  // features/editor
266
266
  export { SdTiptapEditor } from "./features/editor/sd-tiptap-editor";
267
+ export { SdMarkdownEditor } from "./features/editor/sd-markdown-editor";
267
268
 
268
269
  // features/visual
269
270
  export { SdLabel } from "./features/visual/sd-label";
package/styles.css CHANGED
@@ -534,9 +534,9 @@
534
534
  --theme-success-dark: hsl(149.9515480441, 168.4093941383%, 24.2652557495%);
535
535
  --theme-success-darker: hsl(150.0005284119, 143.0825359597%, 20.9804319787%);
536
536
  --theme-success-darkest: rgb(1.4779812192, 102.3765397158, 48.0900438304);
537
- --theme-warning-lightest: hsl(33.3343342232, 102.528234295%, 96.507296985%);
538
- --theme-warning-lighter: hsl(34.2903094524, 101.2893750504%, 91.682860556%);
539
- --theme-warning-light: hsl(32.1783475455, 100.2607268985%, 82.8640062583%);
537
+ --theme-warning-lightest: hsl(34.2903094524, 101.2893750504%, 91.682860556%);
538
+ --theme-warning-lighter: hsl(32.1783475455, 100.2607268985%, 82.8640062583%);
539
+ --theme-warning-light: hsl(30.9781472306, 103.8794214342%, 71.2539413381%);
540
540
  --theme-warning-default: hsl(31.4330872217, 102.5675912326%, 51.3170331393%);
541
541
  --theme-warning-dark: hsl(23.8136653657, 138.2924575772%, 40.3162356329%);
542
542
  --theme-warning-darker: hsl(20.5064222619, 127.6827158995%, 34.7800557535%);
@@ -3728,34 +3728,6 @@ body.sd-theme-blueprint,
3728
3728
  box-shadow: 5px 5px 0 rgba(28, 62, 156, 0.14);
3729
3729
  }
3730
3730
 
3731
- .sd-theme-blueprint sd-permission-table table > * > tr > * {
3732
- border-bottom: 1px solid var(--border-color-lighter);
3733
- }
3734
-
3735
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._before,
3736
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._title,
3737
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._after {
3738
- background: var(--trans-lighter);
3739
- border-top: 1px solid var(--border-color-default);
3740
- border-bottom: 1px solid var(--border-color-default);
3741
- color: var(--text-trans-default);
3742
- font-weight: 700;
3743
- }
3744
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._before > *,
3745
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._title > *,
3746
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=first] > *._after > * {
3747
- color: var(--text-trans-default) !important;
3748
- }
3749
-
3750
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=info] > *._title,
3751
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=info] > *._after,
3752
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=warning] > *._title,
3753
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=warning] > *._after,
3754
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=success] > *._title,
3755
- .sd-theme-blueprint sd-permission-table table > * > tr[data-sd-theme=success] > *._after {
3756
- background: transparent;
3757
- }
3758
-
3759
3731
  .sd-theme-blueprint sd-modal > ._dialog > ._header {
3760
3732
  background: var(--theme-primary-default);
3761
3733
  color: var(--text-trans-rev-default);
@@ -3769,6 +3741,29 @@ body.sd-theme-blueprint,
3769
3741
  .sd-theme-blueprint sd-crud-detail > sd-base-container > sd-busy-container > .bg-control > .main-align-end {
3770
3742
  background: var(--theme-gray-lightest);
3771
3743
  }
3744
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._before,
3745
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._title,
3746
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._after {
3747
+ border-radius: 0;
3748
+ box-shadow: inset 0 -1px 0 var(--border-color-lighter);
3749
+ background: var(--theme-gray-lighter);
3750
+ font-weight: bold;
3751
+ }
3752
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._before > *,
3753
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._title > *,
3754
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=first] > *._after > * {
3755
+ color: var(--text-trans-default) !important;
3756
+ }
3757
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=info] > *._title,
3758
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=info] > *._after,
3759
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=warning] > *._title,
3760
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=warning] > *._after,
3761
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=success] > *._title,
3762
+ .sd-theme-blueprint sd-permission-table > table > * > tr[data-sd-theme=success] > *._after {
3763
+ border-radius: 0;
3764
+ box-shadow: inset 0 -1px 0 var(--border-color-lighter);
3765
+ background: var(--theme-gray-lightest);
3766
+ }
3772
3767
 
3773
3768
  .flex-row {
3774
3769
  display: flex !important;