@wipco/sdui 0.25.0 → 0.27.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.
package/dist/meta.js CHANGED
@@ -3393,6 +3393,279 @@ var ApprovalStepperMeta = {
3393
3393
  },
3394
3394
  resize: { kind: "none" }
3395
3395
  };
3396
+ var RankBoardMeta = {
3397
+ name: "RankBoard",
3398
+ label: "\uC9C1\uC704 \uC11C\uC5F4 \uBCF4\uB4DC",
3399
+ category: "input",
3400
+ icon: "list",
3401
+ description: "\uC9C1\uC704 \uB9C8\uC2A4\uD130\uB97C \uAE09(rank_order) \uD589 \xD7 \uC9C1\uC704 \uCE69\uC758 2\uCC28\uC6D0 \uB4DC\uB798\uADF8 \uBCF4\uB4DC\uB85C \uD3B8\uC9D1\uD55C\uB2E4. \uBAA9\uB85D\xB7\uB4F1\uB85D\xB7\uC218\uC815\xB7\uC0AD\uC81C\xB7\uC21C\uC11C \uC800\uC7A5(PUT {endpoint}/order {ranks})\uC744 \uC704\uC82F\uC774 \uC18C\uC720\uD558\uACE0, \uBCC0\uACBD \uD6C4 invalidate \uC561\uC158\uC73C\uB85C \uB2E4\uB978 \uD654\uBA74\uC758 \uC9C1\uC704 \uC870\uD68C\uB97C \uB3D9\uAE30\uD654\uD55C\uB2E4.",
3402
+ props: [
3403
+ { name: "endpoint", kind: "string", label: "API \uACBD\uB85C", default: "/job-positions", description: "\uC9C1\uC704 \uB9C8\uC2A4\uD130 \uB9AC\uC18C\uC2A4 \uACBD\uB85C \u2014 GET/POST/PATCH/DELETE\uC640 PUT {endpoint}/order \uC804\uBD80 \uC774 \uACBD\uB85C\uB97C \uC4F4\uB2E4.", group: "data", advanced: true },
3404
+ { name: "entity", kind: "string", label: "\uAD8C\uD55C \uC5D4\uD2F0\uD2F0", default: "job_position", description: "\uD504\uB86D \uC0DD\uB7B5 \uC2DC \uB80C\uB354\uB7EC \uAD8C\uD55C \uD310\uC815\uC5D0 \uC4F8 \uC5D4\uD2F0\uD2F0.", group: "behavior", advanced: true },
3405
+ { name: "canCreate", kind: "boolean", label: "\uB4F1\uB85D \uD5C8\uC6A9", bindable: true, description: "\uC0DD\uB7B5\uD558\uBA74 \uB80C\uB354\uB7EC \uAD8C\uD55C \uD310\uC815(entity.create)\uC73C\uB85C \uC2A4\uC2A4\uB85C \uD310\uB2E8\uD55C\uB2E4.", group: "behavior", advanced: true },
3406
+ { name: "canUpdate", kind: "boolean", label: "\uC218\uC815 \uD5C8\uC6A9", bindable: true, description: "\uC0DD\uB7B5\uD558\uBA74 entity.update \uD310\uC815.", group: "behavior", advanced: true },
3407
+ { name: "canDelete", kind: "boolean", label: "\uC0AD\uC81C \uD5C8\uC6A9", bindable: true, description: "\uC0DD\uB7B5\uD558\uBA74 entity.delete \uD310\uC815.", group: "behavior", advanced: true }
3408
+ ],
3409
+ children: { accepts: false },
3410
+ dom: { element: "div" },
3411
+ preset: {
3412
+ component: "RankBoard",
3413
+ // 빈 props 는 저장 왕복에서 사라지므로(편집기 계약) 프리셋은 실제로 채운다.
3414
+ // 경로·엔티티는 도메인이 아니라 설정이라 예시 값을 둔다 — 드롭한 사람이 곧 바꾼다.
3415
+ props: { endpoint: "/job-positions", entity: "job_position" }
3416
+ },
3417
+ resize: { kind: "none" }
3418
+ };
3419
+ var customApproverItem = [
3420
+ { name: "id", kind: "string", label: "\uC2DD\uBCC4\uC790", required: true },
3421
+ { name: "name", kind: "string", label: "\uD45C\uC2DC\uBA85", required: true },
3422
+ {
3423
+ name: "type",
3424
+ kind: "enum",
3425
+ label: "\uC885\uB958",
3426
+ required: true,
3427
+ options: [
3428
+ { value: "user", label: "\uC9C1\uC6D0" },
3429
+ { value: "group", label: "\uBD80\uC11C\xB7\uADF8\uB8F9" }
3430
+ ]
3431
+ }
3432
+ ];
3433
+ var approvalLineStepItem = [
3434
+ { name: "id", kind: "string", label: "\uC2A4\uD15D id", required: true },
3435
+ {
3436
+ name: "type",
3437
+ kind: "enum",
3438
+ label: "\uC720\uD615",
3439
+ description: "\uC5C6\uC73C\uBA74 \uBC31\uC5D4\uB4DC\uAC00 custom\uC73C\uB85C \uCDE8\uAE09\uD55C\uB2E4(\uB9C8\uC774\uADF8\uB808\uC774\uC158 \uC774\uAD00 \uC2A4\uD15D \uD638\uD658).",
3440
+ options: [
3441
+ { value: "team_leader", label: "\uD300\uC7A5" },
3442
+ { value: "division_head", label: "\uBCF8\uBD80\uC7A5\xB7\uC2E4\uC7A5" },
3443
+ { value: "custom", label: "\uC0AC\uC6A9\uC790 \uC9C0\uC815" }
3444
+ ]
3445
+ },
3446
+ {
3447
+ name: "name",
3448
+ kind: "string",
3449
+ label: "\uD45C\uC2DC\uBA85",
3450
+ description: "\uBC31\uC5D4\uB4DC\uAC00 \uACB0\uC7AC \uB2E8\uACC4 \uC124\uBA85\uC73C\uB85C \uADF8\uB300\uB85C \uC4F4\uB2E4. \uC5C6\uC73C\uBA74 type\uC73C\uB85C \uB300\uC2E0\uD55C\uB2E4."
3451
+ },
3452
+ {
3453
+ name: "order",
3454
+ kind: "number",
3455
+ label: "\uC21C\uBC88",
3456
+ required: true,
3457
+ description: "1\uBD80\uD130. \uD3B8\uC9D1\uAE30\uAC00 \uAC12\uC744 \uBC14\uAFC0 \uB54C\uB9C8\uB2E4 1..n\uC73C\uB85C \uC815\uADDC\uD654\uD55C\uB2E4."
3458
+ },
3459
+ {
3460
+ name: "customApprovers",
3461
+ kind: "array",
3462
+ label: "\uC9C0\uC815 \uACB0\uC7AC\uC790",
3463
+ description: "type\uC774 custom\uC77C \uB54C\uB9CC \uC758\uBBF8\uAC00 \uC788\uB2E4. \uC2A4\uD399 \uB9AC\uD130\uB7F4\uC5D0\uB294 \uD55C \uBC88\uB3C4 \uB4F1\uC7A5\uD558\uC9C0 \uC54A\uC558\uACE0, \uD615\uD0DC\uC758 \uADFC\uAC70\uB294 \uC800\uC7A5 JSON \uACC4\uC57D\uC774\uB2E4.",
3464
+ item: customApproverItem
3465
+ }
3466
+ ];
3467
+ var ApprovalLineEditorMeta = {
3468
+ name: "ApprovalLineEditor",
3469
+ label: "\uAE30\uBCF8 \uACB0\uC7AC\uC120 \uD3B8\uC9D1\uAE30",
3470
+ category: "input",
3471
+ icon: "route",
3472
+ description: "\uACB0\uC7AC \uB2E8\uACC4\uB97C \uCD94\uAC00\xB7\uC0AD\uC81C\xB7\uC7AC\uC815\uB82C\uD558\uB294 controlled \uD3B8\uC9D1\uAE30. \uC800\uC7A5 JSON(approval_forms.default_steps)\uC758 \uD0A4\uB97C \uADF8\uB300\uB85C \uC4F4\uB2E4.",
3473
+ props: [
3474
+ {
3475
+ name: "value",
3476
+ kind: "array",
3477
+ label: "\uACB0\uC7AC\uC120",
3478
+ required: true,
3479
+ bindable: true,
3480
+ description: "\uC2A4\uD15D \uBC30\uC5F4. \uC2E4\uCE21 4/4\uAC00 \uC804\uBD80 $state \uBC14\uC778\uB529\uC774\uB2E4.",
3481
+ group: "data",
3482
+ item: approvalLineStepItem
3483
+ },
3484
+ {
3485
+ name: "onChange",
3486
+ kind: "action",
3487
+ label: "\uACB0\uC7AC\uC120 \uBCC0\uACBD",
3488
+ required: true,
3489
+ eventArg: "order\uB97C 1..n\uC73C\uB85C \uC815\uADDC\uD654\uD55C \uC2A4\uD15D \uBC30\uC5F4",
3490
+ group: "behavior"
3491
+ },
3492
+ // 실측 4/4 — 전부 setState + fromEvent
3493
+ {
3494
+ name: "options",
3495
+ kind: "array",
3496
+ label: "\uACB0\uC7AC\uC790 \uD6C4\uBCF4",
3497
+ bindable: true,
3498
+ description: "\uAC80\uC0C9 \uACBD\uB85C\uAC00 \uC5C6\uC744 \uB54C \uB85C\uCEEC \uAC80\uC0C9 \uB300\uC0C1.",
3499
+ group: "data",
3500
+ item: customApproverItem
3501
+ },
3502
+ // 실측 4/4 (원소 28개)
3503
+ {
3504
+ name: "searchEndpoint",
3505
+ kind: "string",
3506
+ label: "\uACB0\uC7AC\uC790 \uAC80\uC0C9 \uACBD\uB85C",
3507
+ description: "GET {\uACBD\uB85C}?q=\u2026 \uB85C \uC9C1\uC6D0\xB7\uBD80\uC11C\uB97C \uD1B5\uD569 \uAC80\uC0C9\uD55C\uB2E4. \uC5C6\uC73C\uBA74 options\uB85C \uB85C\uCEEC \uAC80\uC0C9\uB9CC \uD55C\uB2E4.",
3508
+ group: "data",
3509
+ advanced: true
3510
+ },
3511
+ // 실측 0/4 — 구현에는 있다
3512
+ {
3513
+ name: "groupSearchEndpoint",
3514
+ kind: "string",
3515
+ label: "\uBD80\uC11C \uAC80\uC0C9 \uACBD\uB85C",
3516
+ description: "\uC8FC\uBA74 searchEndpoint\uC640 \uBCD1\uB82C\uB85C \uC870\uD68C\uD574 \uACB0\uACFC\uB97C \uD569\uCE5C\uB2E4(v2\uC758 /employees + /departments \uBCD1\uB82C \uAC80\uC0C9\uACFC \uAC19\uC740 \uBAA8\uC591). \uC774 \uACBD\uB85C\uC758 \uC751\uB2F5\uC740 \uC804\uBD80 \uADF8\uB8F9\uC73C\uB85C \uCDE8\uAE09\uD55C\uB2E4.",
3517
+ group: "data",
3518
+ advanced: true
3519
+ },
3520
+ { name: "disabled", kind: "boolean", label: "\uBE44\uD65C\uC131", default: false, bindable: true, group: "behavior" }
3521
+ // 실측 0/4
3522
+ ],
3523
+ children: { accepts: false },
3524
+ dom: { element: "div" },
3525
+ // 실측: 루트가 <div class="wp-col">
3526
+ // 프리셋에 searchEndpoint를 넣지 않는다 — 소스가 `if (searchEndpoint)`로 감싸고 있어
3527
+ // 미지정이면 fetch 경로 자체가 없다. default에 2스텝을 넣어 빈 상태가 아닌 모습을 보여 준다.
3528
+ preset: {
3529
+ component: "ApprovalLineEditor",
3530
+ props: {
3531
+ value: {
3532
+ $state: "approvalLineForm.defaultSteps",
3533
+ default: [
3534
+ { id: "st1", name: "\uD300\uC7A5", type: "team_leader", order: 1 },
3535
+ { id: "st2", name: "\uBCF8\uBD80\uC7A5", type: "division_head", order: 2 }
3536
+ ]
3537
+ },
3538
+ onChange: { action: "setState", key: "approvalLineForm.defaultSteps", fromEvent: true },
3539
+ options: [
3540
+ { id: "u1", name: "\uAE40\uB3C4\uD604", type: "user" },
3541
+ { id: "u2", name: "\uC774\uC11C\uC5F0", type: "user" },
3542
+ { id: "g1", name: "\uC778\uC0AC\uD300", type: "group" }
3543
+ ]
3544
+ }
3545
+ },
3546
+ resize: { kind: "none" }
3547
+ };
3548
+ var ApprovalOverridesEditorMeta = {
3549
+ name: "ApprovalOverridesEditor",
3550
+ label: "\uACB0\uC7AC\uC120 \uC624\uBC84\uB77C\uC774\uB4DC \uD3B8\uC9D1\uAE30",
3551
+ category: "input",
3552
+ icon: "layers",
3553
+ description: "\uC9C1\uCC45\xB7\uC9C1\uAE09\uBCC4\uB85C \uAE30\uBCF8 \uACB0\uC7AC\uC120 \uB300\uC2E0 \uC801\uC6A9\uD560 \uACB0\uC7AC\uB77C\uC778 \uBAA9\uB85D. \uC9C1\uCC45\uACFC \uC9C1\uAE09\uC740 OR\uC774\uACE0, \uC704\uC5D0\uC11C\uBD80\uD130 \uBA3C\uC800 \uB9DE\uB294 \uAC83\uC774 \uC6B0\uC120\uD55C\uB2E4.",
3554
+ props: [
3555
+ {
3556
+ name: "value",
3557
+ kind: "array",
3558
+ label: "\uC624\uBC84\uB77C\uC774\uB4DC \uBAA9\uB85D",
3559
+ required: true,
3560
+ bindable: true,
3561
+ description: "\uC2E4\uCE21 2/2\uAC00 \uC804\uBD80 $state \uBC14\uC778\uB529\uC774\uACE0 default\uAC00 \uBE48 \uBC30\uC5F4\uC774\uB2E4. \uC6D0\uC18C \uB9AC\uD130\uB7F4\uC740 \uC2A4\uD399\uC5D0 \uD55C \uAC74\uB3C4 \uC5C6\uC5B4 \uD615\uD0DC\uC758 \uADFC\uAC70\uB294 \uC800\uC7A5 JSON \uACC4\uC57D(approval_forms.line_overrides)\uC774\uB2E4.",
3562
+ group: "data",
3563
+ item: [
3564
+ { name: "id", kind: "string", label: "\uC2DD\uBCC4\uC790", required: true },
3565
+ { name: "name", kind: "string", label: "\uADDC\uCE59 \uC774\uB984", required: true },
3566
+ { name: "jobTitles", kind: "array", label: "\uC801\uC6A9 \uC9C1\uCC45", item: [], itemKind: "string" },
3567
+ { name: "grades", kind: "array", label: "\uC801\uC6A9 \uC9C1\uAE09", item: [], itemKind: "string" },
3568
+ {
3569
+ name: "entityTypes",
3570
+ kind: "array",
3571
+ label: "\uC801\uC6A9 \uC5C5\uBB34\uC720\uD615(\uB808\uAC70\uC2DC)",
3572
+ description: '\uB808\uAC70\uC2DC \uC774\uAD00 \uD0A4 \u2014 UI\uAC00 \uD3B8\uC9D1\uD558\uC9C0 \uC54A\uACE0 spread\uB85C \uBCF4\uC874\uB9CC \uD55C\uB2E4. \uB2E4\uB9CC \uC801\uC6A9 \uC870\uAC74\uC774\uB77C, \uC9C1\uCC45\xB7\uC9C1\uAE09\uC774 \uBAA8\uB450 \uBE44\uC5C8\uC744 \uB54C \uC774 \uAC12\uC758 \uC720\uBB34\uB85C "\uC804 \uC9C1\uC6D0 \uC801\uC6A9"\uACFC "\uB9E4\uCE6D \uC548 \uB428"\uC774 \uAC08\uB9B0\uB2E4.',
3573
+ item: [],
3574
+ itemKind: "string",
3575
+ advanced: true
3576
+ },
3577
+ { name: "steps", kind: "array", label: "\uACB0\uC7AC\uC120", item: approvalLineStepItem }
3578
+ ]
3579
+ },
3580
+ {
3581
+ name: "onChange",
3582
+ kind: "action",
3583
+ label: "\uC624\uBC84\uB77C\uC774\uB4DC \uBCC0\uACBD",
3584
+ required: true,
3585
+ eventArg: "\uBCC0\uACBD\uB41C \uC624\uBC84\uB77C\uC774\uB4DC \uBC30\uC5F4(\uC54C \uC218 \uC5C6\uB294 \uD0A4\uB294 \uADF8\uB300\uB85C \uBCF4\uC874\uB41C\uB2E4)",
3586
+ group: "behavior"
3587
+ },
3588
+ // 실측 2/2
3589
+ {
3590
+ name: "jobTitleOptions",
3591
+ kind: "array",
3592
+ label: "\uC9C1\uCC45 \uD6C4\uBCF4",
3593
+ required: true,
3594
+ bindable: true,
3595
+ description: "\uC9C1\uC6D0 \uB370\uC774\uD130\uC5D0\uC11C distinct\uB85C \uBF51\uC740 \uBB38\uC790\uC5F4 \uBAA9\uB85D.",
3596
+ group: "data",
3597
+ item: [],
3598
+ itemKind: "string"
3599
+ },
3600
+ // 실측 2/2 (원소 10개)
3601
+ {
3602
+ name: "gradeOptions",
3603
+ kind: "array",
3604
+ label: "\uC9C1\uAE09 \uD6C4\uBCF4",
3605
+ required: true,
3606
+ bindable: true,
3607
+ group: "data",
3608
+ item: [],
3609
+ itemKind: "string"
3610
+ },
3611
+ // 실측 2/2 (원소 15개)
3612
+ {
3613
+ name: "searchOptions",
3614
+ kind: "array",
3615
+ label: "\uACB0\uC7AC\uC790 \uD6C4\uBCF4",
3616
+ bindable: true,
3617
+ description: "\uC911\uCCA9\uB41C \uACB0\uC7AC\uC120 \uD3B8\uC9D1\uAE30\uB85C \uADF8\uB300\uB85C \uC804\uB2EC\uB41C\uB2E4. \uAC80\uC0C9 \uACBD\uB85C\uAC00 \uC5C6\uC744 \uB54C\uC758 \uB85C\uCEEC \uAC80\uC0C9 \uB300\uC0C1.",
3618
+ group: "data",
3619
+ item: customApproverItem
3620
+ },
3621
+ // 실측 2/2 (원소 15개)
3622
+ {
3623
+ name: "facetsEndpoint",
3624
+ kind: "string",
3625
+ label: "\uC9C1\uCC45\xB7\uC9C1\uAE09 \uC635\uC158 \uACBD\uB85C",
3626
+ description: "\uC9C1\uC6D0 \uBAA9\uB85D \uACBD\uB85C(\uC608: /employees?limit=500). \uC751\uB2F5\uC758 job_title\xB7grade\uB97C distinct \uCD94\uCD9C\uD574 \uC815\uC801 \uC635\uC158 \uBAA9\uB85D\uC5D0 \uD569\uCE5C\uB2E4 \u2014 v2\uAC00 \uD3B8\uC9D1\uAE30\uC5D0\uC11C \uC9C1\uC811 \uD558\uB358 \uC870\uD68C\uB2E4.",
3627
+ group: "data",
3628
+ advanced: true
3629
+ },
3630
+ {
3631
+ name: "searchEndpoint",
3632
+ kind: "string",
3633
+ label: "\uACB0\uC7AC\uC790 \uAC80\uC0C9 \uACBD\uB85C",
3634
+ description: "\uC911\uCCA9\uB41C \uACB0\uC7AC\uC120 \uD3B8\uC9D1\uAE30\uB85C \uADF8\uB300\uB85C \uC804\uB2EC\uB41C\uB2E4.",
3635
+ group: "data",
3636
+ advanced: true
3637
+ },
3638
+ // 실측 0/2
3639
+ {
3640
+ name: "groupSearchEndpoint",
3641
+ kind: "string",
3642
+ label: "\uBD80\uC11C \uAC80\uC0C9 \uACBD\uB85C",
3643
+ description: "\uC911\uCCA9\uB41C \uACB0\uC7AC\uC120 \uD3B8\uC9D1\uAE30\uB85C \uADF8\uB300\uB85C \uC804\uB2EC\uB41C\uB2E4 \u2014 searchEndpoint\uC640 \uBCD1\uB82C \uC870\uD68C.",
3644
+ group: "data",
3645
+ advanced: true
3646
+ },
3647
+ { name: "disabled", kind: "boolean", label: "\uBE44\uD65C\uC131", default: false, bindable: true, group: "behavior" }
3648
+ // 실측 0/2
3649
+ ],
3650
+ children: { accepts: false },
3651
+ dom: { element: "div" },
3652
+ // 실측: 루트가 <div class="wp-col">
3653
+ // searchEndpoint 금지는 ApprovalLineEditor와 같은 이유다 — 중첩 편집기로 그대로 내려간다.
3654
+ preset: {
3655
+ component: "ApprovalOverridesEditor",
3656
+ props: {
3657
+ value: { $state: "approvalLineForm.lineOverrides", default: [] },
3658
+ onChange: { action: "setState", key: "approvalLineForm.lineOverrides", fromEvent: true },
3659
+ jobTitleOptions: ["\uBCF8\uBD80\uC7A5", "\uD300\uC7A5", "\uD30C\uD2B8\uC7A5"],
3660
+ gradeOptions: ["\uC0AC\uC6D0", "\uB300\uB9AC", "\uACFC\uC7A5", "\uBD80\uC7A5"],
3661
+ searchOptions: [
3662
+ { id: "u1", name: "\uAE40\uB3C4\uD604", type: "user" },
3663
+ { id: "g1", name: "\uC778\uC0AC\uD300", type: "group" }
3664
+ ]
3665
+ }
3666
+ },
3667
+ resize: { kind: "none" }
3668
+ };
3396
3669
  var AutocompleteFieldMeta = {
3397
3670
  name: "AutocompleteField",
3398
3671
  label: "\uC790\uB3D9\uC644\uC131",
@@ -4810,7 +5083,10 @@ var StripMeta = {
4810
5083
  resize: { kind: "none" }
4811
5084
  };
4812
5085
  var widgetComponentMeta = {
5086
+ ApprovalLineEditor: ApprovalLineEditorMeta,
5087
+ ApprovalOverridesEditor: ApprovalOverridesEditorMeta,
4813
5088
  ApprovalStepper: ApprovalStepperMeta,
5089
+ RankBoard: RankBoardMeta,
4814
5090
  AutocompleteField: AutocompleteFieldMeta,
4815
5091
  ColumnBoard: ColumnBoardMeta,
4816
5092
  DiffView: DiffViewMeta,
@@ -4868,4 +5144,4 @@ function paletteGroups(catalog = allComponentMeta) {
4868
5144
  })).filter((group) => group.items.length > 0);
4869
5145
  }
4870
5146
 
4871
- export { ActionsMeta, AlertMeta, ApprovalStepperMeta, AutocompleteFieldMeta, AvatarMeta, BadgeMeta, BreadcrumbMeta, ButtonMeta, CanMeta, CardMeta, ChartMeta, CheckboxMeta, ColMeta, ColumnBoardMeta, DatePickerMeta, DateRangePickerMeta, DialogMeta, DiffViewMeta, DisclosureMeta, DividerMeta, EmptyStateMeta, EventCalendarMeta, FieldMeta, ForEachMeta, FormMeta, FragmentMeta, GridMeta, IconButtonMeta, IconMeta, ImageLightboxMeta, InlineEditMeta, InputMeta, JsonFieldMeta, KeyValueListMeta, LiveClockMeta, MapPreviewMeta, OrgChartMeta, PageHeadMeta, PaginationMeta, PeriodFilterMeta, PrintSheetMeta, ProgressBarMeta, RadioMeta, RecordSheetMeta, RemoteSearchResultsMeta, RowMeta, SDUI_CATEGORIES, SELF_AXIS_PROPS, SearchResultsMeta, SearchableMultiPickerMeta, SectionMeta, SecureScreenMeta, SegmentedControlMeta, SelectMeta, ShowMeta, SidebarNavMeta, SortHandleMeta, SortableListMeta, SpacerMeta, SpinnerMeta, StackedMeterMeta, StatCardMeta, StripMeta, SummaryTableMeta, SwitchMeta, TableMeta, TabsMeta, TagMeta, TagMultiSelectMeta, TextMeta, TextareaMeta, TimePickerMeta, TimelineMeta, ToastMeta, TooltipMeta, TreePickerMeta, TreeViewMeta, allComponentMeta, builtinComponentMeta, coreComponentMeta, dsComponentMeta, getComponentMeta, paletteGroups, richComponentMeta, slotNamesOf, widgetComponentMeta, withSelfAxis, withSelfAxisAll };
5147
+ export { ActionsMeta, AlertMeta, ApprovalLineEditorMeta, ApprovalOverridesEditorMeta, ApprovalStepperMeta, AutocompleteFieldMeta, AvatarMeta, BadgeMeta, BreadcrumbMeta, ButtonMeta, CanMeta, CardMeta, ChartMeta, CheckboxMeta, ColMeta, ColumnBoardMeta, DatePickerMeta, DateRangePickerMeta, DialogMeta, DiffViewMeta, DisclosureMeta, DividerMeta, EmptyStateMeta, EventCalendarMeta, FieldMeta, ForEachMeta, FormMeta, FragmentMeta, GridMeta, IconButtonMeta, IconMeta, ImageLightboxMeta, InlineEditMeta, InputMeta, JsonFieldMeta, KeyValueListMeta, LiveClockMeta, MapPreviewMeta, OrgChartMeta, PageHeadMeta, PaginationMeta, PeriodFilterMeta, PrintSheetMeta, ProgressBarMeta, RadioMeta, RankBoardMeta, RecordSheetMeta, RemoteSearchResultsMeta, RowMeta, SDUI_CATEGORIES, SELF_AXIS_PROPS, SearchResultsMeta, SearchableMultiPickerMeta, SectionMeta, SecureScreenMeta, SegmentedControlMeta, SelectMeta, ShowMeta, SidebarNavMeta, SortHandleMeta, SortableListMeta, SpacerMeta, SpinnerMeta, StackedMeterMeta, StatCardMeta, StripMeta, SummaryTableMeta, SwitchMeta, TableMeta, TabsMeta, TagMeta, TagMultiSelectMeta, TextMeta, TextareaMeta, TimePickerMeta, TimelineMeta, ToastMeta, TooltipMeta, TreePickerMeta, TreeViewMeta, allComponentMeta, builtinComponentMeta, coreComponentMeta, dsComponentMeta, getComponentMeta, paletteGroups, richComponentMeta, slotNamesOf, widgetComponentMeta, withSelfAxis, withSelfAxisAll };
package/dist/rich.js CHANGED
@@ -1,8 +1,9 @@
1
- import { useOptionalModule, DependencyPlaceholder } from './chunk-36MXPCJP.js';
2
- export { TimePicker } from './chunk-36MXPCJP.js';
1
+ import { useOptionalModule, DependencyPlaceholder } from './chunk-WXOU7QTN.js';
2
+ export { TimePicker } from './chunk-WXOU7QTN.js';
3
3
  import { useSduiAssetResolver } from './chunk-DVOPZFQS.js';
4
- import { HoistedStyle } from './chunk-XKLUCUVA.js';
5
- export { DatePicker, DateRangePicker } from './chunk-XKLUCUVA.js';
4
+ import { HoistedStyle } from './chunk-EFMKWPZ3.js';
5
+ export { DatePicker, DateRangePicker } from './chunk-EFMKWPZ3.js';
6
+ import './chunk-XQPTSEJC.js';
6
7
  import { Spinner, EmptyState } from './chunk-WIDDHR7L.js';
7
8
  import './chunk-SAN4IX6N.js';
8
9
  import { useRef, useCallback, useMemo, useState, useEffect, useLayoutEffect } from 'react';
@@ -0,0 +1,43 @@
1
+ import { S as SduiBoxProps } from '../layout-B1QrIBm6.js';
2
+ import React__default from 'react';
3
+
4
+ /** 저장 JSON 계약(approval-line) — 키 이름 변경 금지. */
5
+ interface CustomApprover {
6
+ id: string;
7
+ name: string;
8
+ type: 'user' | 'group';
9
+ }
10
+ /** 저장 JSON 계약(approval-line) — 키 이름 변경 금지. */
11
+ interface ApprovalLineStep {
12
+ id: string;
13
+ /** 없으면 백엔드가 custom으로 취급한다(마이그레이션 이관 스텝 호환). */
14
+ type?: 'team_leader' | 'division_head' | 'custom';
15
+ /** 스텝 표시명 — 백엔드가 결재 단계 설명으로 그대로 쓴다(없으면 type). */
16
+ name?: string;
17
+ customApprovers?: CustomApprover[];
18
+ order: number;
19
+ }
20
+ interface ApprovalLineEditorProps {
21
+ value: ApprovalLineStep[];
22
+ onChange: (steps: ApprovalLineStep[]) => void;
23
+ /** 직원·부서 통합 검색 경로 — GET {endpoint}?q=… (어댑터 fetch). */
24
+ searchEndpoint?: string;
25
+ /**
26
+ * 부서(그룹) 검색 경로 — 주면 searchEndpoint 와 **병렬로** 조회해 결과를 합친다.
27
+ * v2 원본이 이 모양이다: `/employees?q=` 와 `/departments?q=` 를 동시에 던져
28
+ * 사용자·그룹을 한 목록으로 보여 준다(approval-step-editor.tsx:167-168).
29
+ * 이 경로의 응답은 전부 `type:'group'` 으로 정규화한다 — 부서 행에는 type 필드가
30
+ * 없어 기본값(user)으로 잘못 접히기 때문이다.
31
+ */
32
+ groupSearchEndpoint?: string;
33
+ /** 정적 데모 폴백 — searchEndpoint가 없을 때 로컬 검색 대상. */
34
+ options?: CustomApprover[];
35
+ disabled?: boolean;
36
+ }
37
+ declare const stepTypeIcon: (type: ApprovalLineStep["type"]) => "user" | "users" | "building-2";
38
+ /** 스텝 표시 라벨 — 운영자가 붙인 이름 > 유형 > 커스텀 결재자 나열(30자 말줄임). */
39
+ declare const stepLabel: (step: ApprovalLineStep) => string;
40
+ /** 바깥에서 온 `style`·`className`을 뿌리에 얹어 내보낸다 — 자기 축(폭·여백)이 닿게 하는 통로. */
41
+ declare const ApprovalLineEditor: React__default.FC<ApprovalLineEditorProps & SduiBoxProps>;
42
+
43
+ export { ApprovalLineEditor, type ApprovalLineEditorProps, type ApprovalLineStep, type CustomApprover, stepLabel, stepTypeIcon };
@@ -0,0 +1,7 @@
1
+ export { ApprovalLineEditor, stepLabel, stepTypeIcon } from '../chunk-SAPJVLZM.js';
2
+ import '../chunk-BD75U73S.js';
3
+ import '../chunk-DVOPZFQS.js';
4
+ import '../chunk-EFMKWPZ3.js';
5
+ import '../chunk-XQPTSEJC.js';
6
+ import '../chunk-WIDDHR7L.js';
7
+ import '../chunk-SAN4IX6N.js';
@@ -0,0 +1,42 @@
1
+ import { S as SduiBoxProps } from '../layout-B1QrIBm6.js';
2
+ import React__default from 'react';
3
+ import { ApprovalLineStep, CustomApprover } from './ApprovalLineEditor.js';
4
+
5
+ /** 저장 JSON 계약(approval-line) — 키 이름 변경 금지. */
6
+ interface ApprovalLineOverride {
7
+ id: string;
8
+ name: string;
9
+ jobTitles: string[];
10
+ grades: string[];
11
+ /** 레거시 이관 키(적용 업무유형) — 편집 금지, spread로 보존만 한다. */
12
+ entityTypes?: string[];
13
+ steps: ApprovalLineStep[];
14
+ }
15
+ interface ApprovalOverridesEditorProps {
16
+ value: ApprovalLineOverride[];
17
+ onChange: (value: ApprovalLineOverride[]) => void;
18
+ /** 선택 가능한 직책 목록(직원 데이터에서 distinct 추출한 문자열). */
19
+ jobTitleOptions: string[];
20
+ /** 선택 가능한 직급 목록. */
21
+ gradeOptions: string[];
22
+ /**
23
+ * 직책·직급 옵션을 스스로 끌어올 직원 목록 경로(예: `/employees?limit=500`).
24
+ * v2 는 편집기가 직접 `/employees` 를 distinct 추출했다(approval-line-overrides-
25
+ * editor.tsx) — 같은 방식이다. 주면 응답의 `job_title`·`grade` 를 모아
26
+ * jobTitleOptions/gradeOptions **에 합친다**(대체가 아니라 합집합 — 정적 폴백이
27
+ * 캔버스 샌드박스에서 살아남아야 한다). 실패는 조용히 무시한다: 폴백 목록이
28
+ * 그대로 남고, 저장된 값은 withSelected 가 어차피 살린다.
29
+ */
30
+ facetsEndpoint?: string;
31
+ /** 결재자 통합 검색 경로 — 중첩 결재선 편집기로 전달. */
32
+ searchEndpoint?: string;
33
+ /** 부서(그룹) 검색 경로 — 중첩 결재선 편집기로 전달. */
34
+ groupSearchEndpoint?: string;
35
+ /** 정적 데모 폴백 결재자 목록 — 중첩 결재선 편집기로 전달. */
36
+ searchOptions?: CustomApprover[];
37
+ disabled?: boolean;
38
+ }
39
+ /** 바깥에서 온 `style`·`className`을 뿌리에 얹어 내보낸다 — 자기 축(폭·여백)이 닿게 하는 통로. */
40
+ declare const ApprovalOverridesEditor: React__default.FC<ApprovalOverridesEditorProps & SduiBoxProps>;
41
+
42
+ export { type ApprovalLineOverride, ApprovalOverridesEditor, type ApprovalOverridesEditorProps };
@@ -0,0 +1,9 @@
1
+ export { ApprovalOverridesEditor } from '../chunk-ZDRERW4G.js';
2
+ import '../chunk-QDEZXA34.js';
3
+ import '../chunk-SAPJVLZM.js';
4
+ import '../chunk-BD75U73S.js';
5
+ import '../chunk-DVOPZFQS.js';
6
+ import '../chunk-EFMKWPZ3.js';
7
+ import '../chunk-XQPTSEJC.js';
8
+ import '../chunk-WIDDHR7L.js';
9
+ import '../chunk-SAN4IX6N.js';
@@ -1,6 +1,7 @@
1
- export { AutocompleteField, endpointSearchFn, toAutocompleteOptions } from '../chunk-OG62LSFH.js';
2
- import '../chunk-U7ZK7WYH.js';
1
+ export { AutocompleteField, endpointSearchFn, toAutocompleteOptions } from '../chunk-6S5CFNFM.js';
2
+ import '../chunk-BD75U73S.js';
3
3
  import '../chunk-DVOPZFQS.js';
4
- import '../chunk-XKLUCUVA.js';
4
+ import '../chunk-EFMKWPZ3.js';
5
+ import '../chunk-XQPTSEJC.js';
5
6
  import '../chunk-WIDDHR7L.js';
6
7
  import '../chunk-SAN4IX6N.js';
@@ -1,4 +1,5 @@
1
- export { PeriodFilter } from '../chunk-PFUULIZ2.js';
2
- import '../chunk-XKLUCUVA.js';
1
+ export { PeriodFilter } from '../chunk-INWASR2G.js';
2
+ import '../chunk-EFMKWPZ3.js';
3
+ import '../chunk-XQPTSEJC.js';
3
4
  import '../chunk-WIDDHR7L.js';
4
5
  import '../chunk-SAN4IX6N.js';
@@ -0,0 +1,27 @@
1
+ import { S as SduiBoxProps } from '../layout-B1QrIBm6.js';
2
+ import React__default from 'react';
3
+
4
+ /** 내부 표준형 — 서버 행(snake_case)을 이 모양으로 정규화해 들고 다닌다. */
5
+ interface JobPosition {
6
+ id: string;
7
+ name: string;
8
+ rankOrder: number;
9
+ sortOrder: number;
10
+ isActive: boolean;
11
+ }
12
+ interface RankBoardProps {
13
+ /** 직위 마스터 API 경로(기본 /job-positions). 목록·등록·수정·삭제·순서 저장 전부 이 경로다. */
14
+ endpoint?: string;
15
+ /** 권한 판정에 쓸 엔티티(기본 job_position). */
16
+ entity?: string;
17
+ /** 등록(신규 카드·이 급에 추가) 게이트 — 생략 시 렌더러 권한 판정으로 판단. */
18
+ canCreate?: boolean;
19
+ /** 수정(드래그·▲▼·이동·이름변경·사용전환) 게이트 — 생략 시 렌더러 권한 판정. */
20
+ canUpdate?: boolean;
21
+ /** 삭제 게이트 — 생략 시 렌더러 권한 판정. */
22
+ canDelete?: boolean;
23
+ }
24
+ /** 바깥 style·className 을 뿌리에 얹는다 — 자기 축(폭·여백) 통로. */
25
+ declare const RankBoard: React__default.FC<RankBoardProps & SduiBoxProps>;
26
+
27
+ export { type JobPosition, RankBoard, type RankBoardProps };
@@ -0,0 +1,6 @@
1
+ export { RankBoard } from '../chunk-DIVN4TBW.js';
2
+ import '../chunk-QU7YVMFA.js';
3
+ import '../chunk-DVOPZFQS.js';
4
+ import '../chunk-XQPTSEJC.js';
5
+ import '../chunk-WIDDHR7L.js';
6
+ import '../chunk-SAN4IX6N.js';
@@ -1,5 +1,6 @@
1
- export { SearchableMultiPicker } from '../chunk-N5IATDUF.js';
2
- import '../chunk-U7ZK7WYH.js';
3
- import '../chunk-XKLUCUVA.js';
1
+ export { SearchableMultiPicker } from '../chunk-C53NGSA3.js';
2
+ import '../chunk-BD75U73S.js';
3
+ import '../chunk-EFMKWPZ3.js';
4
+ import '../chunk-XQPTSEJC.js';
4
5
  import '../chunk-WIDDHR7L.js';
5
6
  import '../chunk-SAN4IX6N.js';
@@ -1,6 +1,7 @@
1
- export { TreePicker } from '../chunk-EQW24SJC.js';
2
- import '../chunk-IDUN2ESE.js';
3
- import '../chunk-U7ZK7WYH.js';
4
- import '../chunk-XKLUCUVA.js';
1
+ export { TreePicker } from '../chunk-U3HYQCFA.js';
2
+ import '../chunk-X5R2HHEN.js';
3
+ import '../chunk-BD75U73S.js';
4
+ import '../chunk-EFMKWPZ3.js';
5
+ import '../chunk-XQPTSEJC.js';
5
6
  import '../chunk-WIDDHR7L.js';
6
7
  import '../chunk-SAN4IX6N.js';
@@ -1,5 +1,6 @@
1
- export { TreeView, buildTreeNodes, pruneExcluded, resolveTreeNodes } from '../chunk-IDUN2ESE.js';
2
- import '../chunk-U7ZK7WYH.js';
3
- import '../chunk-XKLUCUVA.js';
1
+ export { TreeView, buildTreeNodes, pruneExcluded, resolveTreeNodes } from '../chunk-X5R2HHEN.js';
2
+ import '../chunk-BD75U73S.js';
3
+ import '../chunk-EFMKWPZ3.js';
4
+ import '../chunk-XQPTSEJC.js';
4
5
  import '../chunk-WIDDHR7L.js';
5
6
  import '../chunk-SAN4IX6N.js';
@@ -18,6 +18,8 @@ import { SearchableMultiPickerProps } from './SearchableMultiPicker.js';
18
18
  export { MultiPickerOption, SearchableMultiPicker } from './SearchableMultiPicker.js';
19
19
  import { RecordSheetProps } from './RecordSheet.js';
20
20
  export { RecordSheet, RecordSheetCell, RecordSheetCellKind, RecordSheetRow } from './RecordSheet.js';
21
+ import { RankBoardProps } from './RankBoard.js';
22
+ export { RankBoard } from './RankBoard.js';
21
23
  import { PrintSheetProps } from './PrintSheet.js';
22
24
  export { PrintSheet } from './PrintSheet.js';
23
25
  import { PeriodFilterProps } from './PeriodFilter.js';
@@ -40,10 +42,14 @@ import { DiffViewProps } from './DiffView.js';
40
42
  export { DiffField, DiffList, DiffView } from './DiffView.js';
41
43
  import { ColumnBoardProps } from './ColumnBoard.js';
42
44
  export { ColumnBoard, ColumnBoardColumn, ColumnBoardItem, ColumnBoardTone } from './ColumnBoard.js';
43
- import * as React from 'react';
44
- import { S as SduiBoxProps } from '../layout-B1QrIBm6.js';
45
45
  import { ApprovalStepperProps } from './ApprovalStepper.js';
46
46
  export { ApprovalStepper, ApprovalStepperStep } from './ApprovalStepper.js';
47
+ import { ApprovalOverridesEditorProps } from './ApprovalOverridesEditor.js';
48
+ export { ApprovalLineOverride, ApprovalOverridesEditor } from './ApprovalOverridesEditor.js';
49
+ import * as React from 'react';
50
+ import { S as SduiBoxProps } from '../layout-B1QrIBm6.js';
51
+ import { ApprovalLineEditorProps } from './ApprovalLineEditor.js';
52
+ export { ApprovalLineEditor, ApprovalLineStep, CustomApprover } from './ApprovalLineEditor.js';
47
53
  export { AutocompleteField, AutocompleteFieldProps, AutocompleteOption, AutocompleteSearchFn, AutocompleteSearchResult, toAutocompleteOptions } from './AutocompleteField.js';
48
54
 
49
55
  /**
@@ -54,6 +60,8 @@ export { AutocompleteField, AutocompleteFieldProps, AutocompleteOption, Autocomp
54
60
  * `SduiWidgetComponentName`이 어휘 목록이 되게 한다.
55
61
  */
56
62
  declare const widgetComponents: {
63
+ ApprovalLineEditor: React.FC<ApprovalLineEditorProps & SduiBoxProps>;
64
+ ApprovalOverridesEditor: React.FC<ApprovalOverridesEditorProps & SduiBoxProps>;
57
65
  ApprovalStepper: React.FC<ApprovalStepperProps & SduiBoxProps>;
58
66
  ColumnBoard: React.FC<ColumnBoardProps & SduiBoxProps>;
59
67
  DiffView: React.FC<DiffViewProps & SduiBoxProps>;
@@ -66,6 +74,7 @@ declare const widgetComponents: {
66
74
  OrgChart: React.FC<OrgChartProps & SduiBoxProps>;
67
75
  PeriodFilter: React.FC<PeriodFilterProps & SduiBoxProps>;
68
76
  PrintSheet: React.FC<PrintSheetProps & SduiBoxProps>;
77
+ RankBoard: React.FC<RankBoardProps & SduiBoxProps>;
69
78
  RecordSheet: React.FC<RecordSheetProps & SduiBoxProps>;
70
79
  SearchableMultiPicker: React.FC<SearchableMultiPickerProps & SduiBoxProps>;
71
80
  SecureScreen: React.FC<SecureScreenProps & SduiBoxProps>;
@@ -80,4 +89,4 @@ declare const widgetComponents: {
80
89
  /** 위젯 어휘의 컴포넌트 이름 union — 메타데이터 대조에 쓴다(`@wipco/sdui/meta`). */
81
90
  type SduiWidgetComponentName = keyof typeof widgetComponents;
82
91
 
83
- export { ApprovalStepperProps, ColumnBoardProps, DiffViewProps, DisclosureProps, EventCalendarProps, ImageLightboxProps, InlineEditProps, JsonFieldProps, LiveClockProps, OrgChartProps, PeriodFilterProps, PrintSheetProps, RecordSheetProps, type SduiWidgetComponentName, SearchableMultiPickerProps, SecureScreenProps, StackedMeterProps, StripProps, SummaryTableProps, TagMultiSelectProps, TimelineProps, TreePickerProps, TreeViewProps, widgetComponents };
92
+ export { ApprovalLineEditorProps, ApprovalOverridesEditorProps, ApprovalStepperProps, ColumnBoardProps, DiffViewProps, DisclosureProps, EventCalendarProps, ImageLightboxProps, InlineEditProps, JsonFieldProps, LiveClockProps, OrgChartProps, PeriodFilterProps, PrintSheetProps, RankBoardProps, RecordSheetProps, type SduiWidgetComponentName, SearchableMultiPickerProps, SecureScreenProps, StackedMeterProps, StripProps, SummaryTableProps, TagMultiSelectProps, TimelineProps, TreePickerProps, TreeViewProps, widgetComponents };